Home  >  Article  >  Backend Development  >  PHP middleware analysis

PHP middleware analysis

小云云
小云云Original
2018-03-22 09:19:512658browse

This article mainly shares with you the analysis of PHP middleware. Middleware is a closure and returns a closure. Middleware provides a convenient mechanism for filtering HTTP requests entering the application, and can be divided into pre-middleware and post-middleware. Commonly used to verify whether the user is

# authenticated, add response headers (cross-domain), record request logs, etc.

Example

##

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

Output:

Laravle need a filter middlewareLaravle need a auth middleware
this is a Laravle application
Laravle need a log middleware


##Packaging program

#The execution order of middleware is determined by the packaging function (pack_middleware). The closure returned here is actually quite Yu:

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

Middleware must meet certain specifications: always return a closure, and always pass in the same parameters in the closure ( Determined by the main logic), the closure always returns the execution result of the handler;

If the logic of the middleware is completed before returning the handle return $handler($name), that is Premiddleware, otherwise postmiddleware.

Related recommendations:

PHP middleware (middleware) analysis

The above is the detailed content of PHP middleware analysis. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn