Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Middleware-Analyse

PHP-Middleware-Analyse

小云云
小云云Original
2018-03-22 09:19:512704Durchsuche

Dieser Artikel teilt Ihnen hauptsächlich die Analyse mit, dass PHP-Middleware ein Abschluss ist und einen Abschluss zurückgibt. Middleware bietet einen praktischen Mechanismus zum Filtern von HTTP-Anforderungen, die in die Anwendung eingehen, und kann in Prä-Middleware und Post-Middleware unterteilt werden. Wird häufig verwendet, um zu überprüfen, ob der Benutzer durch

authentifiziert wurde, Antwortheader hinzuzufügen (domänenübergreifend), Anforderungsprotokolle aufzuzeichnen usw.

Beispiel

<?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;);

Ausgabe:

Laravle benötigt eine Filter-Middleware.
Laravle benötigt eine Authentifizierungs-Middleware.
Dies ist eine Laravle-Anwendung.
Laravle benötigt eine Protokoll-Middleware >

Verpackungsprogramm

Die Ausführungsreihenfolge der Middleware wird durch die Verpackungsfunktion (pack_middleware) bestimmt und der hier zurückgegebene Verschluss ist eigentlich Das Obige ist äquivalent zu:

Schreibspezifikationen

Middleware muss bestimmte Spezifikationen erfüllen: Geben Sie immer einen Abschluss zurück und übergeben Sie den Abschluss immer Mit dem Bei gleichen Parametern (bestimmt durch die Hauptlogik) gibt der Abschluss immer das Ausführungsergebnis des Handlers zurück.

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

Wenn die Middleware-Logik das Handle zurückgibt, geben Sie $handler($name) zurück, falls zuvor abgeschlossen , es handelt sich um Prä-Middleware, andernfalls handelt es sich um Post-Middleware.

Verwandte Empfehlungen:

PHP-Middleware (Middleware)-Analyse

Das obige ist der detaillierte Inhalt vonPHP-Middleware-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn