Les middlewares fournissent un mécanisme pratique pour inspecter et filtrer les requêtes HTTP entrant dans votre application. Par exemple, Lithe inclut un middleware qui vérifie si l'utilisateur de votre application est authentifié. Si l'utilisateur n'est pas authentifié, le middleware redirigera l'utilisateur vers l'écran de connexion de votre application. Cependant, si l'utilisateur est authentifié, le middleware permettra à la requête de se poursuivre au sein de l'application.
Dans Lithe, les middlewares sont des fonctions qui ont accès à l'objet de requête ($req), à l'objet de réponse ($res) et à la fonction $next dans la boucle requête-réponse de l'application. La fonction $next est une fonction du routeur Lithe qui, lorsqu'elle est invoquée, exécute le middleware à côté du middleware actuel.
Les fonctions du middleware fournissent un mécanisme pratique pour inspecter, filtrer et gérer les requêtes HTTP entrant dans votre application.
Les fonctions middleware peuvent effectuer les tâches suivantes :
Si la fonction middleware actuelle ne termine pas le cycle requête-réponse, elle doit appeler $next() pour passer le contrôle à la fonction middleware suivante. Sinon, la demande sera en attente.
Le code suivant montre les éléments d'un appel de fonction middleware :
$app->use(function ($req, $res, $next) { $next(); });
Où :
- $req : argument de requête HTTP pour la fonction middleware, appelé "$req" par convention.
- $res : argument de réponse HTTP pour la fonction middleware, appelé "$res" par convention.
- $next : Argument de rappel de la fonction middleware, appelé "$next" par convention.
Commençons par un exemple simple de middleware appelé myLogger. Ce middleware imprime le message LOGGED chaque fois qu'une requête le traverse. Le middleware est défini comme une fonction affectée à une variable appelée myLogger :
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
Notez l'appel à $next() ci-dessus. L’appel de cette fonction appelle la fonction middleware suivante dans l’application. La fonction $next() ne fait pas partie de PHP ou Lithe, mais c'est le troisième argument passé à la fonction middleware. La fonction $next() peut avoir n'importe quel nom, mais par convention elle est toujours appelée "next". Pour éviter toute confusion, utilisez toujours cette convention.
Il est préférable de considérer le middleware comme une série de « couches » que les requêtes HTTP doivent traverser avant d'atteindre votre application. Chaque couche peut examiner la demande et même la rejeter complètement.
Pour charger une fonction middleware, vous pouvez appeler la méthode use() de la classe LitheApp, en spécifiant la fonction middleware souhaitée. Par exemple, le code suivant charge la fonction middleware myLogger avant d'exécuter la route vers le chemin racine (/) :
$app->use(function ($req, $res, $next) { $next(); });
Chaque fois que l'application reçoit une demande, elle imprime le message "LOGGED".
L'ordre de chargement du middleware est important : les fonctions du middleware chargées en premier sont également exécutées en premier.
La fonction middleware myLogger imprime simplement un message puis transmet la requête à la fonction middleware suivante sur la pile en appelant la fonction $next().
Une application Lithe peut utiliser les types de middleware suivants :
Lier le middleware au niveau de l'application à une instance de l'objet d'application à l'aide des méthodes use() et METHOD(), où METHOD est la méthode HTTP de la requête gérée par la fonction middleware (telle que GET, PUT ou POST) en minuscules.
Cet exemple montre une fonction middleware sans chemin d'assemblage. La fonction est exécutée chaque fois que l'application reçoit une requête.
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
L'exemple ci-dessous montre un middleware qui gère les requêtes GET dans le chemin /user/:id.
$app = new \Lithe\App; $myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); }; $app->use($myLogger); $app->get('/', function ($req, $res, $next) { $res->send('Hello World!'); });
Le middleware au niveau du routeur fonctionne de la même manière que le middleware au niveau de l'application, sauf qu'il est lié à une instance de LitheHttpRouter.
$app->use(function ($req, $res, $next) { echo 'Hello World!'; $next(); });
Chargez le middleware au niveau du routeur à l'aide des fonctions USE et METHOD.
L'exemple de code suivant montre un système middleware utilisant un middleware au niveau du routeur :
$app->get('/user/:id', function ($req, $res, $next) { // Se o ID do usuário for '0', passa para o próximo middleware if ($req->param('id') === '0') { return $next(); } // Caso contrário, envia uma resposta específica $res->send('ID não é 0'); }, function ($req, $res) { // Envia uma resposta quando o ID for '0' $res->send('regular'); });
Utilisez un middleware tiers pour ajouter des fonctionnalités aux applications Lithe.
Installez le module PHP requis pour la fonctionnalité souhaitée puis chargez-le dans votre application au niveau de l'application ou au niveau du routeur.
L'exemple suivant illustre le chargement du middleware de session, la fonction LitheMiddlewareSessionsession.
$router = new \Lithe\Http\Router;
Pour une liste partielle des fonctions de middleware tiers couramment utilisées avec Lithe, voir : Middleware tiers.
Si vous avez besoin que votre middleware soit configurable, créez une fonction qui accepte un tableau d'options ou d'autres paramètres, puis renvoie l'implémentation du middleware en fonction des paramètres d'entrée.
$app->use(function ($req, $res, $next) { $next(); });
Le middleware peut désormais être utilisé comme indiqué ci-dessous.
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!