Certainly! In Laravel 12, the best practice for modular monolithic applications is to use service providers for registering routes, rather than directly registering them in bootstrap/app.php. This approach keeps your application organized, maintainable, and leverages Laravel's service container and provider system.
Recommended Approach:
-
Create a
RouteServiceProviderfor your module (e.g., Orders): This provider will handle all route registrations for the module.// app/Modules/Orders/Providers/RouteServiceProvider.php namespace App\Modules\Orders\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { public function boot() { Route::middleware('web') ->namespace('App\Modules\Orders\Http\Controllers') ->group(base_path('app/Modules/Orders/routes/web.php')); } } -
Register the
RouteServiceProviderin yourOrderServiceProvider:// app/Modules/Orders/Providers/OrderServiceProvider.php namespace App\Modules\Orders\Providers; use Illuminate\Support\ServiceProvider; class OrderServiceProvider extends ServiceProvider { public function register() { $this->app->register(RouteServiceProvider::class); } } -
Register your
OrderServiceProviderinbootstrap/providers.php:// bootstrap/providers.php return [ // ... App\Modules\Orders\Providers\OrderServiceProvider::class, ];
Summary:
- Do NOT register routes directly in
bootstrap/app.php. - Use a dedicated
RouteServiceProviderfor each module. - Register the
RouteServiceProviderinside your module's main service provider (e.g.,OrderServiceProvider). - Register the main service provider in
bootstrap/providers.php.
This structure keeps your modules decoupled and your route registration clean and maintainable.