thinkphp中间件
定义中间
可以通过命令行指令快速生成中间件
php think make:middleware Check
这个指令会 app/middleware
目录下面生成一个Check
中间件。
<?phpnamespace app\middleware;class Check
{public function handle($request, \Closure $next){if ($request->param('name') == 'think') {return redirect('index/think');}return $next($request);}
}
middleware:
注册一个中间件:
如果没有返回return $next($request),那它就没有办法往下执行。所以就当个固定格式就可以了
前/后置中间件
1. 将$next($request)放在方法底部的方式,属于前置中间件;
2. 前置中间件就是请求阶段来进行拦截验证,比如登录判断、跳转、权限等;
3. 而后置中间件就是请求完毕之后再进行验证,比如写入日志等等;
public function handle($request, \Closure $next){//中间件代码,前置
return $next($request);}public function handle($request, \Closure $next){$response = $next($request);//中间件代码,后置
return $response;}
1. 中间件提供了一个end()方法,可以在中间件执行到最后时执行;
public function end(Response $response){//中间件执行到最后执行
echo $response->getData();}
局部中间件
路由中间件
1. 创建一个给路由使用的中间件,判断路由的ID值实现相应的验证
class Auth{public function handle($request, \Closure $next){if ($request->param('id') == 10) {echo '是管理员!';}return $next($request);}}
1. 路由方法提供了一个middleware()方法,让指定的路由采用指定的中间件;
Route::rule('ar/:id', 'Address/read')
->middleware(\app\middleware\Auth::class);
->middleware([Auth::class, Check::class]); //支持多个中间件,这里use了