定义中间件的步骤
默认中间件存放位置
'default_namespace' => 'app\\http\\middleware\\',
创建一个 Check中间件
<?php
namespace app\http\middleware;
class Check
{
public function handle($request, \Closure $next)
{
if ($request->param('name') == 'think') {
return redirect('index/think');
}
return $next($request);
}
}
中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包。
如何理解$next($request)
1. new App())->run() 中 执行到了中间件调度方法
$response = $this->middleware->dispatch($this->request);
2.在 think\Middleware.php 中可以看到dispatch 方法 调用了
call_user_func($this->resolve($type), $request);
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。