NOTE: This documentation is for version 4.x of the package, which only supports Laravel 11 and nwidart/laravel-modules ^11. If you are using Laravel 10, please refer to the 3.x documentation.
This package brings the power of modules to Laravel Filament. It allows you to organize your filament code into fully
autonomous modules that can be easily shared and reused across multiple projects.
With this package, you can turn each of your modules into a fully functional Filament Plugin with its own resources,
pages, widgets, components and more. What's more, you don't even need to register each of these plugins in your main
Filament Panel. All you need to do is register the ModulesPlugin
in your panel, and it will take care of the rest for
you.
This package is simple a wrapper of nwidart/laravel-modules package to make it work with Laravel Filament.
- A command to prepare your module for Filament
- A command to create a Filament Cluster in your module
- A command to create additional Filament Plugins in your module
- A command to create a new Filament resource in your module
- A command to create a new Filament page in your module
- A command to create a new Filament widget in your module
- Organize your admin panel into Cluster, one for each supported module.
v4.x of this package requires the following dependencies:
- Laravel 11.x or higher
- Filament 3.x or higher
- PHP 8.2 or higher
- nwidart/laravel-modules 11.x
If you are using Laravel 10 please use version 3.x instead.
You can install the package via composer:
composer require coolsam/modules:^4
This will automatically install nwidart/laravel-modules: ^11
as well. Make sure you go through
the documentation to understand how to use the package and to
configure it properly
before proceeding.
You can publish the config file with:
php artisan vendor:publish --tag="modules-config"
Alternatively, just run the installation command and follow the prompts:
php artisan modules:install
After publishing the config file, you can configure the package to your liking. The configuration file is located
at config/filament-modules.php
.
The following can be adjusted in the configuration file:
- auto-register-plugins: If set to true, the package will automatically register all the plugins in your modules. Otherwise, you will need to register each plugin manually in your Filament Panel.
- clusters.enabled: If set to true, a cluster will be created in each module during the
module:filament:install
command and all filament files for that module may reside inside that cluster. Otherwise, filament files will reside in Filament/Resources, Filament/Pages, Filament/Widgets, etc. - clusters.use-top-navigation: If set to true, the top navigation will be used to navigate between clusters while the actual links will be loaded as a side sub-navigation. In my opinion, this improves UX. Otherwise, the package will honor the configuration that you have in your panel.
The package comes with a ModulesPlugin
that you can register in your Filament Panel. This plugin will automatically
load all the modules in your application and register them as Filament plugins.
In order to achieve this, you need to register the ModulesPlugin
in your panel of choice (e.g. Admin Panel) like so:
// e.g. in App\Providers\Filament\AdminPanelProvider.php
use Coolsam\Modules\ModulesPlugin;
public function panel(Panel $panel): Panel
{
return $panel
...
->plugin(ModulesPlugin::make());
}
That's it! now you are ready to start creating some filament code in your module of choice!
If you don't have a module already, you can generate one using the module:make
command like so:
php artisan module:make MyModule
Next, run the module:filament:install
command to generate the necessary Filament files and directories in your module:
php artisan module:filament:install MyModule
This will guide you interactively on whether you want to organize your code in clusters, and whether you would like to create a default cluster. At the end of this installation, you will have the following structure in your module:
- Modules
- MyModule
- app
- Filament
- Clusters
- MyModule
- Pages
- Resources
- Widgets
- MyModule.php
- MyModule
- Pages
- Resources
- Widgets
- MyModulePlugin.php
- Clusters
- Filament
- app
- MyModule
As you can see, there are two main files generated: The plugin class and optionally the cluster class. After generation, you are free to make any modifications to these classes as you may see fit.
The plugin will be loaded automatically unless the configuration is set otherwise. As a result, it will also load all its clusters automatically.
Your module is now ready to be used in your Filament Panel. Use the following commands during development to generate new resources, pages, widgets and clusters in your module:
php artisan module:make:filament-resource
Follow the interactive prompts to create a new resource in your module.
php artisan module:make:filament-page
Follow the interactive prompts to create a new page in your module.
###Creating a new widget
php artisan module:make:filament-widget
Follow the interactive prompts to create a new widget in your module.
php artisan module:make:filament-cluster
Follow the interactive prompts to create a new cluster in your module.
php artisan module:make:filament-plugin
Follow the interactive prompts to create a new plugin in your module.
php artisan module:make:filament-theme
Follow the prompts and instructions to create a new Filament Theme in your module and to register it to your panel.
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.