Comme son nom l'indique, le middleware intercepte et traite les données de demande, vérifie les données et détermine s'il convient d'autoriser l'entrée au prochain middleware après un traitement logique entre les demandes et les réponses.
Le middleware est divisé en middleware préfixe et middleware post-fixe. Peut être utilisé pour l'authentification des autorisations, la journalisation, etc.
Le middleware fournit un mécanisme pratique pour filtrer les requêtes HTTP entrant dans l'application. (Apprentissage recommandé : Programmation PHP du débutant à compétent)
Par exemple, Laravel dispose d'un middleware intégré pour vérifier l'authentification des utilisateurs. Si l'utilisateur n'est pas authentifié, le middleware redirigera l'utilisateur vers l'interface de connexion. Cependant, si l'utilisateur est authentifié, le middleware autorisera la requête plus loin dans l'application.
Bien sûr, en plus de l'authentification d'identité, vous pouvez également écrire un middleware supplémentaire pour effectuer diverses tâches.
Par exemple : le middleware CORS peut être chargé d'ajouter des informations d'en-tête appropriées à toutes les réponses quittant l'application ; le middleware de journalisation peut enregistrer toutes les demandes entrant dans l'application.
Exemple
<?php // 框架核心应用层 $application = function($name) { echo "this is a {$name} application\n"; }; // 前置校验中间件 $auth = function($handler) { return function($name) use ($handler) { echo "{$name} need a auth middleware\n"; return $handler($name); }; }; // 前置过滤中间件 $filter = function($handler) { return function($name) use ($handler) { echo "{$name} need a filter middleware\n"; return $handler($name); }; }; // 后置日志中间件 $log = function($handler) { return function($name) use ($handler) { $return = $handler($name); echo "{$name} need a log middleware\n"; return $return; }; }; // 中间件栈 $stack = []; // 打包 function pack_middleware($handler, $stack) { foreach (array_reverse($stack) as $key => $middleware) { $handler = $middleware($handler); } return $handler; } // 注册中间件 // 这里用的都是全局中间件,实际应用时还可以为指定路由注册局部中间件 $stack['log'] = $log; $stack['filter'] = $filter; $stack['auth'] = $auth; $run = pack_middleware($application, $stack); $run('Laravle');
Sortie :
Laravle need a filter middleware Laravle need a auth middleware this is a Laravle application Laravle need a log middleware
Packager
La séquence d'exécution du middleware est donnée par La fonction packaging (pack_middleware) détermine que la fermeture renvoyée ici est en réalité équivalente à :
$run = $log($filter($auth($application))); $run('Laravle');
Spécifications d'écriture
Le middleware doit répondre à certaines spécifications : toujours renvoyer Une fermeture, la les mêmes paramètres sont toujours passés dans la fermeture (déterminés par la logique principale), et la fermeture renvoie toujours le résultat de l'exécution du gestionnaire
Si la logique middleware renvoie le handle return $ S'il est terminé avant le handler( $name), c'est un pré-middleware, sinon c'est un post-middleware.
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!