Maison >développement back-end >Problème PHP >qu'est-ce que le middleware php

qu'est-ce que le middleware php

(*-*)浩
(*-*)浩original
2019-09-06 14:23:535070parcourir

qu'est-ce que le middleware php

Le middleware PHP 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 est authentifié, ajouter des en-têtes de réponse (inter-domaines), enregistrer les journaux de demandes, etc. (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)

quest-ce que le middleware php

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 need a filter middleware
Laravle need a auth middleware
this is a Laravle application
Laravle need a log middleware

Programme de packaging

L'ordre d'exécution du middleware est déterminé par la fonction de packaging (pack_middleware). La fermeture renvoyée ici est en fait équivalente à :

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

Spécifications d'écriture

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

Si la logique du middleware est terminée avant de renvoyer le handle return $handler ($name), il s'agit d'un pré-middleware, sinon c'est d'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!

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