Installation:
composer require coolsam/modules
Run the Laravel Modules installation:
php artisan modules:install
Update composer.json with the merge-plugin config for autoloading:
"extra": {
"merge-plugin": {
"include": ["Modules/*/composer.json"]
}
}
Register the Plugin:
Add ModulesPlugin to your Filament panel provider (e.g., App\Providers\Filament\AdminPanelProvider):
use Coolsam\Modules\ModulesPlugin;
public function panel(Panel $panel): Panel {
return $panel
->plugin(ModulesPlugin::make());
}
Initialize a Module: Create a module:
php artisan module:make MyModule
Install Filament support:
php artisan module:filament:install MyModule
Generate a Filament Resource for a module:
php artisan module:filament:resource
Follow prompts to scaffold a resource (e.g., PostResource) in Modules/MyModule/app/Filament/Resources/.
Modular Development:
Modules/MyModule/app/Filament/Resources/).Modules/MyModule/app/Filament/Clusters/MyModule/).BlogModule with a PostsCluster containing PostResource and DashboardPage.Panel Integration:
BlogPanel) via:
php artisan module:filament:panel
ModulesPlugin (configurable in config/filament-modules.php).Plugin-Based Isolation:
php artisan module:filament:plugin
auto-register-plugins is true in config.Access Control:
Coolsam\Modules\Resource/Page/Widget to enforce module-level permissions:
use Coolsam\Modules\Resource;
use CanAccessTrait;
class PostResource extends Resource {
use CanAccessTrait;
// ...
}
Modules/MyModule/app/Providers/Filament/MyModuleServiceProvider) to bind module-specific services.module:filament:theme.clusters.use-top-navigation to true for a cleaner UI (top-level navigation with side submenus).Autoloading Issues:
merge-plugin in composer.json causes missing module classes.composer dump-autoload after adding modules.Resource Generation Bugs:
Panel Registration Conflicts:
BlogAdminPanel vs. BlogPanel).Cluster vs. Direct Files:
app/Filament/ (non-cluster) take precedence over cluster files.config/modules.php:
'enabled' => [
'MyModule',
],
ModulesPlugin is registered in the panel and auto-register-plugins is true in config/filament-modules.php.panels.group and panels.enabled in the config.module:filament:install):
php artisan vendor:publish --tag="modules-commands"
ModulesPlugin to conditionally register modules:
public static function make(): static {
return parent::make()
->registerModules(fn () => Module::enabled()->where('active', true));
}
CanAccessTrait to add custom rules:
use Coolsam\Modules\CanAccessTrait;
class CustomAccessTrait {
use CanAccessTrait;
protected function authorizeAccess(): void {
// Custom logic (e.g., role-based)
}
}
mode Setting:
PLUGINS: Registers modules as Filament plugins only.PANELS: Registers modules as separate panels.BOTH (default): Combines both approaches.clusters.enabled is false, files default to app/Filament/Resources/, etc. Disable clusters for global access.How can I help you explore Laravel packages today?