Blog ENI : Toute la veille numérique !
Jusqu'à ce soir ! : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Laravel
  3. Middlewares
Extrait - Laravel Un framework efficace pour développer vos applications PHP (2e édition)
Extraits du livre
Laravel Un framework efficace pour développer vos applications PHP (2e édition) Revenir à la page d'achat du livre

Middlewares

À propos des middlewares

1. Cycle de vie de l’application

Un processus invisible et complexe se met en marche à chaque requête exécutée sur une application Laravel, par exemple lorsqu’un visiteur se rend sur une page. La requête traverse en effet une succession de couches avant d’arriver jusqu’à l’application elle-même. Il en est de même pour la réponse, qui à son tour devra suivre son chemin jusqu’au navigateur du client.

Dans un scénario classique, un client va dans un premier temps effectuer une requête dans son navigateur. Il peut avoir saisi une URL ou cliqué sur un lien de l’application. Ensuite, la requête est envoyée depuis le navigateur vers le serveur qui a été configuré pour cette application. Dans le contexte d’une application Laravel, la configuration du serveur indique qu’il faut envoyer toutes les requêtes sur la page public/index.php qui a la charge d’initialiser le framework.

L’une des premières étapes de cette initialisation est d’inclure et d’exécuter le fichier autoload.php de Composer. Ce fichier a pour mission de préparer le chargement des classes à la volée, sans passer par l’utilisation de l’instruction PHP require. C’est grâce à ce système que les classes sont accessibles automatiquement lorsqu’on les appelle n’importe où dans l’application....

Créer un middleware

1. Utiliser Artisan

La façon la plus simple de créer un middleware est d’utiliser Artisan. Appeler la commande make:middleware a pour effet de créer une structure de base de middleware dans le dossier app/Http/Middleware réservé à cet usage.

Création d’un middleware pour autoriser seulement les utilisateurs admins

sail artisan make:middleware MustBeAdmin  

2. Structure d’un middleware

Un middleware est une classe qui contient une fonction handle dont la signature contient deux arguments : un objet de type Request nommé $request qui représente la requête en cours et un objet Closure nommé $next qui représente l’étape suivante.

Pour signifier que le middleware a bien été traversé et que le cycle de vie de l’application peut continuer son cours en traversant de nouveaux middlewares pour arriver jusqu’au traitement dans les contrôleurs, la dernière instruction de la fonction handle du middleware doit appeler l’objet $next avec l’objet $request en paramètre.

Le code ci-dessous représente une implémentation du middleware MustBeAdmin. Dans cet exemple, nous partons du principe qu’une méthode isAdmin est présente dans la classe App\Models\User et qu’elle renvoie le booléen true si l’utilisateur est un administrateur...

Utiliser un middleware

1. Middleware global

Un middleware global est un middleware qui s’exécute à chaque appel d’une page, peu importe la page : autrement dit, le middleware global s’exécute à chaque requête HTTP.

Par défaut, Laravel propose déjà une série de middlewares globaux. Le middleware CheckForMaintenanceMode permet de vérifier si l’application est en mode maintenance avant de continuer. Si c’est le cas, il renvoie une réponse immédiatement, sous la forme d’une erreur HTTP 503 service indisponible. Le middleware TrimStrings supprime les espaces au début et à la fin de toutes les chaînes de caractères envoyées en paramètres par l’utilisateur, que ce soit par le biais d’une requête HTTP GET, POST ou PUT. Ainsi, la requête est nettoyée avant même d’avoir atteint sa route.

Un middleware global sert donc à effectuer une action à chaque requête et évite ainsi une duplication de code au début des contrôleurs, ou bien d’avoir à encadrer toutes les routes par un middleware non global (voir la suite du chapitre). Il s’agit donc d’actions que l’on souhaite réaliser à chaque fois, quel que soit le contexte. Par exemple, si l’application dans son ensemble est limitée à une certaine adresse IP, il est possible de créer un middleware qui aura la charge de faire respecter cette règle.

Pour déclarer un middleware global, ajoutez-le dans la liste des middlewares globaux déjà déclarés. Cette liste se trouve dans la classe App\Http\Kernel, plus précisément dans la propriété $middleware de la classe.

Déclaration d’un middleware global, dans la classe App\Http\Kernel

protected $middleware = [ 
 
    // Middlewares existants. 
    // Note : Les espaces de nom ont été retirés pour 
    // une meilleure lisibilité. 
    CheckForMaintenanceMode::class, 
 
    ValidatePostSize::class, 
 
    TrimStrings::class, 
 
    ConvertEmptyStringsToNull::class, ...