lazerg / laravel-modular
There is no license information available for the latest version (v0.13) of this package.
Laravel Modular
v0.13
2024-07-05 01:47 UTC
Requires
- php: ^8.0
- laravel/framework: ^11.0
README
Laravel Modular helps you split a Laravel application into smaller independent modules. Each module contains its own controllers, models, views and routes. This keeps features isolated, simplifies maintenance and allows modules to be reused in other projects.
Installation
composer require lazerg/laravel-modular
Creating a module
- Create a directory for the module, e.g.
modules/User/app
. - Register it in
composer.json
so that classes are autoloaded:
{ "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/", "Modules\\User\\": "modules/User/app/", "Modules\\User\\Database\\Factories\\": "modules/User/database/factories/", "Modules\\User\\Database\\Seeders\\": "modules/User/database/seeders/" } } }
Run composer dump-autoload
after updating the file.
Next create UserServiceProvider
inside modules/User/app
and extend ModuleServiceProvider
. Finally register this provider in bootstrap/providers.php
.
Moving existing files
Move the default Laravel files into your new module:
/app/Models/User
->/modules/User/app/Models/User
- Update
auth.providers.users.model
inconfig/auth.php
toModules\\User\\Models\\User
. /database/migrations/2014_10_12_000000_create_users_table.php
->/modules/User/database/migrations/2014_10_12_000000_create_users_table.php
/database/factories/UserFactory.php
->/modules/User/database/factories/UserFactory.php
Seeder setup
- Make
database/seeders/DatabaseSeeder.php
extendModularDatabaseSeeder
(do not overriderun
). - Create
DatabaseSeeder
inmodules/User/database/seeders
extendingBaseDatabaseSeeder
. - Add your seeders like
UserSeeder
in the same folder and register them in the module seeder's$earlySeeders
or$seeders
array.
Module loaders
ModuleServiceProvider
automatically loads different resources from a module:
Path | Register & Usage |
---|---|
modules/{module}/app/Commands |
add command classes via the $commands property |
modules/{module}/app/Events |
register events using the $events property |
modules/{module}/app/Observers |
add model observers using the $observers property |
modules/{module}/app/Policies |
register policies using the $policies property |
modules/{module}/config |
configuration files are loaded automatically, access them with config('User::settings.key') |
modules/{module}/database/migrations |
migration files in this folder are loaded |
modules/{module}/routes |
web.php , api.php and console.php are automatically registered |
modules/{module}/lang |
translation files available via trans('User::file.key') |
modules/{module}/views |
view files available via view('User::file') |
modules/{module}/database/seeders/DatabaseSeeder |
extend BaseDatabaseSeeder and register other seeders in $earlySeeders or $seeders |
Routing
web.php
Route::get('/index', [UserController::class, 'index'])->name('index');
Option | Default | Notes |
---|---|---|
name | users.index |
set $disableRoutePluralization = true in UserServiceProvider to use user.index |
namespace | Modules\\User\\Http\\Controllers |
|
middleware | [ 'web', 'auth' ] |
set $mustBeAuthenticated = false to remove auth ; use $mustBeGuest = true for guest-only routes |
url | /users/index |
set $disableRoutePluralization = true for /user/index ; set $disableWebRoutePrefix = true for /index |
api.php
Route::get('/index', [UserController::class, 'index'])->name('index');
Option | Default | Notes |
---|---|---|
name | api.users.index |
set $disableRoutePluralization = true for api.user.index |
namespace | Modules\\User\\Http\\Api\\Controllers |
|
middleware | [ 'api', 'auth' ] |
set $mustBeAuthenticated = false to remove auth ; use $mustBeGuest = true for guest-only routes |
url | /api/users/index |
set $disableRoutePluralization = true for /api/user/index |