zonneplan / laravel-module-loader
Module loader for Laravel
Installs: 83 585
Dependents: 0
Suggesters: 0
Security: 0
Stars: 24
Watchers: 9
Forks: 1
Open Issues: 1
Requires
- php: ^8.2
- illuminate/console: ^11.0
- illuminate/database: ^11.0
- illuminate/routing: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.0||^11.0
README
The zonneplan/laravel-module-loader
package provides an easy to use module loader
which can be used to modulize your project.
How to use
First install the package, see the installation section.
Creating a new module:
- Create a folder, for example:
Modules
in the app directory. - After that create another one, for example:
User
. - In the root of that folder insert a
UserServiceProvider
which extends our abstractModule
class. - Implement the function
getModuleNamespace()
like:
namespace Modules\User; use Zonneplan/ModuleLoader/Module; class UserServiceProvider extends Module { public function getModuleNamespace(): string { return 'user'; } }
- Register the
UserServiceProvider
in theconfig/app.php
file.
'providers' => [ Modules\User\UserServiceProvider::class ]
Structure within the module:
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
├──MyModuleServiceProvider.php
├──tests
Access a view from the module:
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');
Registering Policies:
To register policies overwrite the $policies
variable in the ServiceProvider of your module
For example:
protected $policies = [ MyModel::class => MyModelPolicy::class, ];
Registering Middleware:
To register middleware overwrite the $middleware
variable in the ServiceProvider of your module
For example:
protected $middleware = [ 'my-middleware' => MyMiddleware::class, ];
Registering Events & Listeners:
To register events & listeners overwrite the $listen
variable in the ServiceProvider of your module
For example:
protected $listen = [ MyEvent::class => [ MyListener::class ], ];
Registering Event Subscribers:
To register event subscribers overwrite the $subscribe
variable in the ServiceProvider of your module
For example:
protected $subscribe = [ MySubscriber::class ];
Registering routes:
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
Requirements
This package requires at least Laravel 6 or higher, PHP 7.2 or higher
Installation
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"
},
...
Authors
- Aron Rotteveel
- Dennis Stolmeijer
- Wout Hoeve
- Johnny Borg
- Rick Gout
- Thijs Nijholt