muhammedh-shadir's avatar

Modular Monolithic in Laravel 12

Which is best way in laravel 12? register the routes in bootstrap/app.php or creating the RouteServiceProvider class and registering in OrderServiceProvider class.?

Currently what I did was OrderServiceProvider registered in bootstrap/providers.php and RouteServiceProvider registered in OrderServiceProvider class. can someone clarify me please?

0 likes
1 reply
LaryAI's avatar

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:

  1. Create a RouteServiceProvider for 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'));
        }
    }
    
  2. Register the RouteServiceProvider in your OrderServiceProvider:

    // 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);
        }
    }
    
  3. Register your OrderServiceProvider in bootstrap/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 RouteServiceProvider for each module.
  • Register the RouteServiceProvider inside 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.

1 like

Please or to participate in this conversation.