Maison  >  Article  >  développement back-end  >  Analyse du middleware PHP

Analyse du middleware PHP

小云云
小云云original
2018-03-22 09:19:512657parcourir

Cet article partage principalement avec vous l'analyse du middleware PHP qui est une fermeture et renvoie une fermeture. Le middleware fournit un mécanisme pratique pour filtrer les requêtes HTTP entrant dans l'application et peut être divisé en pré-middleware et post-middleware. Couramment utilisé pour vérifier si l'utilisateur a été authentifié par

, ajouter des en-têtes de réponse (inter-domaines), enregistrer les journaux de demandes, etc.

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[&#39;log&#39;] = $log;
$stack[&#39;filter&#39;] = $filter;
$stack[&#39;auth&#39;] = $auth;

$run = pack_middleware($application, $stack);
$run(&#39;Laravle&#39;);

Sortie :

Laravle a besoin d'un middleware de filtre
Laravle a besoin d'un middleware d'authentification
il s'agit d'une application Laravle
Laravle a besoin d'un middleware de journalisation


Programme de packaging

L'ordre d'exécution du middleware est déterminé par la fonction de packaging (pack_middleware), et la fermeture renvoyée ici est en fait Ce qui précède équivaut à :

$run = $log($filter($auth($application)));
$run(&#39;Laravle&#39;);

Spécifications d'écriture

Le middleware doit répondre à certaines spécifications : toujours renvoyer une fermeture, et toujours passer dans la fermeture Avec le mêmes paramètres (déterminés par la logique principale), la fermeture renvoie toujours le résultat de l'exécution du gestionnaire

Si la logique middleware renvoie le handle return $handler($name) Si terminé avant ; , c'est du pré-middleware, sinon c'est du post-middleware.

Recommandations associées :

Analyse du middleware PHP (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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn