Laravel - Middleware: Your Gateway to Request Handling

Bonjour là-bas, futurs développeurs Laravel ! Aujourd'hui, nous allons plonger dans le monde fascinant des Middleware Laravel. Imaginez les middleware comme un vigile attentionné pour votre application - il vérifie et traite les requêtes avant qu'elles n'atteignent la logique principale de votre application. Mettons-nous en route ensemble !

Laravel - Middleware

Qu'est-ce que le Middleware ?

Avant de nous pencher sur le code, comprenons ce qu'est le middleware. Imaginez que vous organisez une fête (votre application), et que vous avez un vigile à l'entrée. Ce vigile peut :

  1. Vérifier si les gens sont sur la liste des invités (authentification)
  2. S'assurer qu'ils sont correctement habillés (validation) 3.leur donner un bracelet (ajouter des informations à la requête)
  3. Ou même les renvoyer (terminer la requête)

C'est essentiellement ce que fait le middleware pour votre application Laravel !

Enregistrer le Middleware

Maintenant, voyons comment nous pouvons créer et enregistrer notre propre middleware.

Créer un Middleware

Premièrement, nous allons créer un middleware simple qui vérifie si un utilisateur a plus de 18 ans :

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}

return $next($request);
}
}

Dans cet exemple, notre middleware CheckAge vérifie si le paramètre age dans la requête est supérieur à 18 ans. Sinon, il redirige vers la page d'accueil. Sinon, il transmet la requête au middleware suivant ou à l'application principale.

Enregistrer un Middleware Global

Pour utiliser ce middleware globalement (pour toutes les routes), nous devons l'enregistrer dans le fichier app/Http/Kernel.php :

protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];

Enregistrer un Middleware de Route

Si vous souhaitez utiliser le middleware uniquement pour certaines routes, vous pouvez l'enregistrer comme un middleware de route :

protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];

Ensuite, vous pouvez l'utiliser dans vos routes comme ceci :

Route::get('adult-only', function () {
//
})->middleware('checkage');

Paramètres du Middleware

Parfois, nous voulons que notre middleware soit plus flexible. C'est là que les paramètres du middleware deviennent pratiques !

Modifions notre middleware CheckAge pour accepter un paramètre d'âge minimum :

<?php

namespace App\Http\Middleware;

use Closure;

class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}

return $next($request);
}
}

Maintenant, nous pouvons utiliser ce middleware avec différents seuils d'âge :

Route::get('adult-only', function () {
//
})->middleware('checkage:18');

Route::get('senior-only', function () {
//
})->middleware('checkage:65');

N'est-ce pas génial ? Nous avons rendu notre middleware réutilisable pour différentes situations !

Middleware Terminable

Parfois, nous voulons que notre middleware fasse quelque chose après que la réponse a été envoyée au navigateur. C'est là que les middleware terminables entrent en jeu !

Créons un middleware qui enregistre le temps de réponse :

<?php

namespace App\Http\Middleware;

use Closure;

class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);

return $next($request);
}

public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('Temps de réponse : ' . $duration . ' secondes');
}
}

Ce middleware ajoute un start_time à la requête, puis enregistre le temps total de réponse après l'envoi de la réponse.

Pour utiliser le middleware terminable, assurez-vous qu'il est enregistré dans votre fichier app/Http/Kernel.php :

protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];

Méthodes du Middleware

Voici un tableau des principales méthodes que vous utiliserez lorsque vous travaillerez avec des middleware :

Méthode Description
handle() La logique principale du middleware. Traite la requête et optionnellement la transmet au middleware suivant.
terminate() S'exécute après que la réponse a été envoyée au navigateur. Utilisé pour le nettoyage ou l'enregistrement.

Conclusion

Et voilà, les amis ! Nous avons parcouru le territoire des Middleware Laravel, de la création et l'enregistrement des middleware à l'utilisation des paramètres et des middleware terminables. Souvenez-vous, le middleware est comme le couteau suisse du traitement des requêtes - il est polyvalent, puissant et un outil essentiel dans votre boîte à outils Laravel.

Alors que vous poursuivez votre aventure Laravel, vous trouverez des centaines de façons créatives d'utiliser le middleware. Peut-être créerez-vous des middleware pour vérifier le mode maintenance, enregistrer les requêtes ou même transformer les données de la requête. Les possibilities sont infinies !

Continuez à coder, continuez à apprendre, et surtout, amusez-vous ! Jusqu'à la prochaine fois, bon codage Laravel !

Credits: Image by storyset