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['log'] = $log; $stack['filter'] = $filter; $stack['auth'] = $auth; $run = pack_middleware($application, $stack); $run('Laravle');
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('Laravle');
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!