In Laravel 11, the middleware configuration has been significantly changed compared to previous versions. Here are the key changes:
1. Removal of the HTTP Kernel: The familiar `Kernel.php` file in the `App\Http` directory has been removed. This file previously contained the middleware configuration.
2. Middleware Configuration in `bootstrap/app.php`: The middleware configuration is now handled in the `bootstrap/app.php` file, using the `withMiddleware()` method of the `Application` class.
Example:
php
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
// Apply middleware to all routes
$middleware->use([ExampleMiddleware::class]);
// Use it only in the web routes
$middleware->web([ExampleMiddleware::class]);
// API only
$middleware->api([ExampleMiddleware::class]);
})
// Other configuration
->create();
3. Customizing Middleware Behavior: The `Middleware` class provides methods to customize the behavior of the default middleware, such as disabling CSRF protection on specific routes or invalidating sessions on other devices.
Example:
php
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(
except: ['stripe/*']
);
$middleware->authenticateSessions();
})
4. Automatic Middleware Registration: With the removal of the HTTP Kernel, middleware is now automatically registered with the Laravel application. You can create a new middleware using the `artisan make:middleware` command, and it will be available for use without any additional registration.
In summary, the key changes to middleware configuration in Laravel 11 are:
- Removal of the HTTP Kernel file
- Middleware configuration moved to the `bootstrap/app.php` file
- Ability to customize middleware behavior using the `Middleware` class
- Automatic registration of middleware, eliminating the need for manual registration
This shift towards a more centralized and customizable middleware configuration aims to simplify the application structure and provide more flexibility in managing middleware in Laravel 11 projects.
Citations:[1] https://securinglaravel.com/security-tip-laravel-11s-middleware/
[2] https://scalybee.com/laravel-11-preview-a-glimpse-into-upcoming-changes/
[3] https://dev.to/grantholle/exploring-middleware-in-laravel-11-2e10
[4] https://laravel.com/docs/11.x/releases
[5] https://laraveldaily.com/post/laravel-11-main-new-features-changes