Un middleware est un mécanisme d’inspection et de filtrage des requêtes HTTP entrantes.
Il permet d’insérer un traitement avant ou après le passage de la requête au contrôleur.Par exemple, Laravel inclut un middleware d’authentification.
Si l’utilisateur n’est pas authentifié, il redirige vers l’écran de connexion ; sinon, il laisse la requête poursuivre.Au-delà de l’authentification, on peut écrire des middlewares pour la journalisation, la protection CSRF, la limitation de débit, etc. Pour les détails sur la protection CSRF de Laravel 13, consultez Protection CSRF.
Les middlewares utilisateurs sont généralement placés dans le répertoire app/Http/Middleware.
Laravel fournit par défaut deux groupes de middlewares : web et api.
Le groupe web s’applique automatiquement à routes/web.php, et le groupe api à routes/api.php.
Groupe de middlewares web
EncryptCookies
AddQueuedCookiesToResponse
StartSession
ShareErrorsFromSession
PreventRequestForgery (protection CSRF)
SubstituteBindings
Des alias sont configurés pour les middlewares fréquemment utilisés.
Utilisez la commande Artisan make:middleware pour créer un nouveau middleware.
php artisan make:middleware EnsureTokenIsValid
app/Http/Middleware/EnsureTokenIsValid.php est généré.
Écrivez la logique de traitement dans la méthode handle.
<?phpnamespace App\Http\Middleware;use Closure;use Illuminate\Http\Request;use Symfony\Component\HttpFoundation\Response;class EnsureTokenIsValid{ /** * Traite la requête entrante. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { if ($request->input('token') !== 'my-secret-token') { return redirect('/home'); } return $next($request); }}
L’appel de $next($request) transmet la requête au traitement suivant.
Si la condition n’est pas satisfaite, retournez une redirection ou une réponse pour interrompre le flux.
Un middleware peut exécuter du code avant ou après la requête.
// Traitement avant la requêtepublic function handle(Request $request, Closure $next): Response{ // Placez ici le pré-traitement return $next($request);}
// Traitement après la réponsepublic function handle(Request $request, Closure $next): Response{ $response = $next($request); // Placez ici le post-traitement return $response;}
Pour n’appliquer un middleware qu’à des routes spécifiques, appelez la méthode middleware dans la définition de route.
use App\Http\Middleware\EnsureTokenIsValid;Route::get('/profile', function () { // ...})->middleware(EnsureTokenIsValid::class);
Passez un tableau pour appliquer plusieurs middlewares.
Route::get('/', function () { // ...})->middleware([First::class, Second::class]);
Pour exclure un middleware d’une route donnée, utilisez withoutMiddleware.
use App\Http\Middleware\EnsureTokenIsValid;Route::middleware([EnsureTokenIsValid::class])->group(function () { Route::get('/', function () { // Le middleware s'applique }); Route::get('/profile', function () { // Le middleware est exclu ici })->withoutMiddleware([EnsureTokenIsValid::class]);});
Regroupez plusieurs middlewares sous une clé pour faciliter leur application aux routes.
Utilisez appendToGroup ou prependToGroup dans bootstrap/app.php.