//一个中间件示例
class Check
{
public function handle($request, \Closure $next)
{
//中间件前置执行操作
$response = $next($request);
//中间件后置执行操作
return $response;
}
}
thinkphp6
中间件的参数和操作基本上是围绕$request
请求类对象操作的,所以中间件主要用于拦截或过滤应用的HTTP请求,包括Session功能、请求缓存和多语言功能等.
中间件的实现过程用到一个很重要的设计模式:
管道(Pipeline): 它的作用是将数据通过一系列的处理操作,得到最终的目标结果.就像一条蛋糕流水线作业,一开始只有一个烤好的蛋糕胚体,然后不断给他添加各种装饰,最终得到了想要的蛋糕.
执行逻辑:
$Pipeline = app(Pipeline::class)
;$middleware = [
function($data,$next){$data['step1'] = 'process 1'; return $next($data);},
function($data,$next){$data['step2'] = 'process 2'; return $next($data);},
];
thinkphp6/8 中间件的关键是了解指谁的中间:
HTTP应用执行的过程的中间
在执行启动HttpRun
事件监听后,知道启动HttpEnd
事件监听为止,这中间的关键节点对 Request对象进行控制调整拦截, 这里面主要知识是俩个地方: 哪些关键点, 如何进行拦截处理
哪些中间件拦截点(一个拦截点是可以方多个中间件的,依次执行)?
Route::rule('hello/:name','hello')->middleware(\app\middleware\Auth::class);
,先判断了权限然后再完成路由跳转.