This service provider will scan Filament
directory of your activated modules (nwidart/laravel-modules) for pages, resources and widgets, and register them in filament config.
You can modify the file if your modules are in a directory other than Modules.
App/Providers
directory<?php namespace App\Providers; use Filament\PluginServiceProvider;use Spatie\LaravelPackageTools\Package; class ModuleFilamentServiceProvider extends PluginServiceProvider{ public static string $name = 'files'; private $modules = []; function __construct($app) { parent::__construct($app); $this->loadModules(); $this->registerFilament('pages'); $this->registerFilament('resources'); $this->registerFilament('widgets'); } public function configurePackage(Package $package): void { parent::configurePackage($package); } function registerFilament($type){ foreach($this->modules as $module){ $path = 'Modules\\'.$module.'\Filament\\'.ucfirst($type).'\\'; $dir = base_path('Modules/'.$module.'/Filament/'.ucfirst($type)); if(is_dir($dir)){ $files = scandir($dir); foreach($files as $file) { if(pathinfo($file, PATHINFO_EXTENSION) !=='php') continue; $class = $path.basename($file,'.php'); config()->push('filament.'.strtolower($type).'.register',$class); } } } } function loadModules(){ $module_statuses = json_decode(file_get_contents(config('modules.activators.file.statuses-file'))); foreach ($module_statuses as $name => $active) { if (!$active) continue; $this->modules[] = $name; } }}
\App\Providers\ModuleFilamentServiceProvider::class
to config/app.php
providersapp/Filament
to their respective modules. For example, Modules/<Module Name>/Filament/Pages
Your filamentphp components should now be registered.
No comments yet…