tomatophp / filament-subscriptions
Manage subscriptions and feature access with customizable plans in FilamentPHP
Installs: 1 073
Dependents: 1
Suggesters: 0
Security: 0
Stars: 28
Watchers: 2
Forks: 3
Open Issues: 3
Requires
README
Filament Subscriptions
Manage subscriptions and feature access with customizable plans in FilamentPHP
thanks for Laravel Subscriptions you can review it before use this package.
Screenshots
Features
- Manage plans
- Manage features
- Manage subscriptions
- multi-tenancy support
- Native Filament subscriptions support
- Subscription Middleware
- Subscription Page like Spark
- Subscription Events
- Subscription Facade Hook
- Subscription Webhooks
- Subscription Payments Integrations
Installation
composer require tomatophp/filament-subscriptions
we need the Media Library plugin to be installed and migrated you can use this command to publish the migration
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"
now you need to publish your migrations
php artisan vendor:publish --provider="Laravelcm\Subscriptions\SubscriptionServiceProvider"
after that please run this command
php artisan filament-subscriptions:install
finally register the plugin on /app/Providers/Filament/AdminPanelProvider.php
->plugin(\TomatoPHP\FilamentSubscriptions\FilamentSubscriptionsPlugin::make())
Using
now on your User.php model or any auth model you like you need to add this trait
namespace App\Models; use Laravelcm\Subscriptions\Traits\HasPlanSubscriptions; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasPlanSubscriptions; }
To configure the billing provider for your application, use the FilamentSubscriptionsProvider
:
use TomatoPHP\FilamentSubscriptions\FilamentSubscriptionsProvider; use TomatoPHP\FilamentSubscriptions\Filament\Pages\Billing; use Filament\Panel; public function panel(Panel $panel): Panel { return $panel // ... ->pages([ Billing::class ]) ->tenantBillingProvider(new FilamentSubscriptionsProvider()); }
This setup allows users to manage their billing through a link in the tenant menu.
Requiring a Subscription
To enforce a subscription requirement for any part of your application, use the requiresTenantSubscription()
method:
use Filament\Panel; public function panel(Panel $panel): Panel { return $panel // ... ->requiresTenantSubscription(); }
Users without an active subscription will be redirected to the billing page.
Register New Subscriper Type
you can register new subscriber type by using this code
use TomatoPHP\FilamentSubscriptions\Facades\FilamentSubscriptions; public function boot() { FilamentSubscriptions::register( \TomatoPHP\FilamentSubscriptions\Services\Contracts\Subscriber::make() ->name('User') ->model(\App\Models\User::class) ); }
Use Events
we add events everywhere on the subscription process and here is the list of events
TomatoPHP\FilamentSubscriptions\Events\CancelPlan
TomatoPHP\FilamentSubscriptions\Events\ChangePlan
TomatoPHP\FilamentSubscriptions\Events\RequestPlan
TomatoPHP\FilamentSubscriptions\Events\SubscribePlan
all events have the same payload
return [ "old" => //Plan, "new" => //Plan, "subscription" => //Subscription, ]
Use Facade Hook
you can use the facade hook to add your custom logic to the subscription process
use TomatoPHP\FilamentSubscriptions\Facades\FilamentSubscriptions; FilamentSubscriptions::afterSubscription(function (array $data){ // your logic here }); FilamentSubscriptions::afterRenew(function (array $data){ // your logic here }); FilamentSubscriptions::afterChange(function (array $data){ // your logic here }); FilamentSubscriptions::afterCanceling(function (array $data){ // your logic here });
Publish Assets
you can publish config file by use this command
php artisan vendor:publish --tag="filament-subscriptions-config"
you can publish views file by use this command
php artisan vendor:publish --tag="filament-subscriptions-views"
you can publish languages file by use this command
php artisan vendor:publish --tag="filament-subscriptions-lang"
Other Filament Packages
Checkout our Awesome TomatoPHP