Tenancy multi-database integration for FilamentPHP
Warning
We have a known problem with route:cache
if you find a problem with multi-database connection from your tenant side you may face this problem just use php artisan route:clear
and it will be fixed.
Multi Database
Create Tenant Resource
Sync Tenant Resource
Password Change
Tenant Impersonate
Share Tenant Data
Custom Theme For Tenant
Livewire Component For Register New Tenant
composer require tomatophp/filament-tenancy
after install your package please run this command
php artisan filament-tenancy:install
in your .env
add this
CENTRAL_DOMAIN=tomatophp.test
where tomatophp.test
is your central domain, and make sure you add a root user or a user have a permission to create database, then in your main central panel add this plugin
use TomatoPHPFilamentTenancyFilamentTenancyPlugin; ->plugin(FilamentTenancyPlugin::make()->panel('app'))
now you need to create a panel for tenancy app
php artisan filament:panel
and make the name same as ->panel('app')
, in your tenancy app panel add this plugin
use TomatoPHPFilamentTenancyFilamentTenancyAppPlugin; ->plugin(FilamentTenancyAppPlugin::make())
now on your configdatabase.php
add this code
...'connections' => ['dynamic' => ['driver' => 'mysql','url' => env('DATABASE_URL'),'host' => env('DB_HOST', '127.0.0.1'),'port' => env('DB_PORT', '3306'),'database' => env('DB_DATABASE', 'forge'),'username' => env('DB_USERNAME', 'forge'),'password' => env('DB_PASSWORD', ''),'unix_socket' => env('DB_SOCKET', ''),'charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','prefix' => '','prefix_indexes' => true,'strict' => true,'engine' => null,'options' => extension_loaded('pdo_mysql') ? array_filter([PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], ... ],
now run config:cache
php artisan config:cache
on your bootstrapapp.php
add this middleware
use StanclTenancyMiddlewareInitializeTenancyByDomain;use StanclTenancyMiddlewareInitializeTenancyBySubdomain; ->withMiddleware(function (Middleware $middleware) {$middleware->group('universal', [InitializeTenancyByDomain::class,InitializeTenancyBySubdomain::class, ]); })
you can allow impersonate to tanent panel with 1 click by use this method on your plugin
use TomatoPHPFilamentTenancyFilamentTenancyPlugin; ->plugin(FilamentTenancyPlugin::make() ->panel('app') ->allowImpersonate() )
you can publish config file by use this command
php artisan vendor:publish --tag="filament-tenancy-config"
you can publish views file by use this command
php artisan vendor:publish --tag="filament-tenancy-views"
you can publish languages file by use this command
php artisan vendor:publish --tag="filament-tenancy-lang"
you can publish migrations file by use this command
php artisan vendor:publish --tag="filament-tenancy-migrations"
Checkout our Awesome TomatoPHP