Plugins
Subscriptions
Manage subscriptions and feature access with customizable plans in FilamentPHP
Developer Tool
Dark theme support
Yes
Multi language support
Yes
Compatible with the latest version
Supported versions: 3.x
Documentation

Screenshot

Latest Stable Version License Downloads

Manage subscriptions and feature access with customizable plans in FilamentPHP

thanks for Laravel Subscriptions you can review it before use this package.

#Screenshots

Tenant Menu User Menu Billing Page Change Subscription Modal Plans Edit Plan Create Feature Features Subscriptions Create Subscription Cancel Modal

#Features

  • [x] Manage plans
  • [x] Manage features
  • [x] Manage subscriptions
  • [x] multi-tenancy support
  • [x] Native Filament subscriptions support
  • [x] Subscription Middleware
  • [x] Subscription Page like Spark
  • [x] Subscription Events
  • [x] 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 Subscriber 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 custom Billing page

You can create your own billing class and register it in config/laravel-subscriptions.php

'pages' => [
'billing' => Billing::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

Abdelmjid Saber
2
Plugins
46
Stars
More from this author
Featured Plugins