| Laravel | laravel-module-loader |
|---|---|
| 5.8 | ^1.0 |
| 6.0 | ^1.0 |
| 7.0 | ^1.0 |
| 8.0 | ^2.0 |
| 9.0 | ^3.0 |
| 10.0 | ^4.0 |
| 11.0 | ^5.0 |
| 12.0 | ^6.0 |
The zonneplan/laravel-module-loader package provides an easy to use module loader
which can be used to modulize your project.
First install the package, see the installation section.
- Create a folder, for example:
Modulesin the app directory. - After that create another one, for example:
User. - In the root of that folder insert a
UserServiceProviderwhich extends our abstractModuleclass. - Implement the function
getModuleNamespace()like:
namespace Modules\User;
use Zonneplan/ModuleLoader/Module;
class UserServiceProvider extends Module
{
public function getModuleNamespace(): string
{
return 'user';
}
}- Register the
UserServiceProviderin theconfig/app.phpfile.
'providers' => [
Modules\User\UserServiceProvider::class
]The expected structure is seen below. Most of it is optional.
app
├── Modules
├──MyModule
├──Config
├──Console
├──Database
├──Factories
├──Migrations
├──Exceptions
├──Http
├──Controllers
├──Middleware
├──Requests
├──Resources
├──Resources
├──lang
├──views
├──Routes
├──web.php
├──api.php
├──channels.php
├──console.php
├──mcp.php
├──MyModuleServiceProvider.php
├──tests
To access a view from a module it will look like 'my-module::path.to.view'
For example:
// In a controller
view('user::index');
// In a blade file
@include('user::index');
@include('user::partials.form');To register policies overwrite the $policies variable in the ServiceProvider of your module
For example:
protected $policies = [
MyModel::class => MyModelPolicy::class,
];To register middleware overwrite the $middleware variable in the ServiceProvider of your module
For example:
protected $middleware = [
'my-middleware' => MyMiddleware::class,
];To register events & listeners overwrite the $listen variable in the ServiceProvider of your module
For example:
protected $listen = [
MyEvent::class => [
MyListener::class
],
];To register event subscribers overwrite the $subscribe variable in the ServiceProvider of your module
For example:
protected $subscribe = [
MySubscriber::class
];All modules will by default try to load all route files in the Routes folder.
Any of the following files will be auto loaded:
routes.php api.php web.php mcp.php
This package requires at least Laravel 6 or higher, PHP 7.2 or higher
composer require zonneplan/laravel-module-loader
The package will automatically register itself.
Register the namespace: "Modules\\": "app/Modules" in composer.json like:
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "app/Modules"
},
...
- Aron Rotteveel
- Dennis Stolmeijer
- Wout Hoeve
- Johnny Borg
- Rick Gout
- Thijs Nijholt