thinkPHP6中间件的使用+完整代码实例
定义中间件 可以通过命令行指令快速生成中间件 php think make:middleware Check 这个指令会 app/middleware目录下面生成一个Check中间件。
1 <?php 2 namespace app\middleware; 3 4 class Check { 5 /** 6 * 处理请求 7 * 8 * @param \think\Request $request 9 * @param \Closure $next 10 * @return Response 11 */ 12 public function handle($request, \Closure $next) { 13 // 14 if (empty($request->session('username'))) { 15 return redirect(url('user/login')); 16 } 17 return $next($request); 18 } 19 }
中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包。 中间件handle方法的返回值必须是一个Response对象。 在这个中间件中我们判断当前请求的name参数等于think的时候进行重定向处理。否则,请求将进一步传递到应用中。要让请求继续传递到应用程序中,
只需使用 $request 作为参数去调用回调函数 $next 。
控制器中使用
![](https://img2020.cnblogs.com/blog/1809075/202008/1809075-20200828114720232-1886730857.png)
插入一行代码:
1 protected $middleware = ['app\middleware\Check::class'];
附:登录的代码
1 public function login() { 2 if (Request::isGet()) { 3 return view(); 4 } else { 5 // 接受登陆的数据 6 $username = input('username'); 7 $pwd = input('pwd'); 8 // 验证 9 $data = Db::table('user')->where('username', $username)->find(); 10 if (empty($data)) { 11 return $this->error('用户不存在,请注册', 'reg'); 12 } else { 13 if ($pwd !== $data['pwd']) { 14 return $this->error('密码错误'); 15 } 16 // 保存到session 17 session('username', $username); 18 return $this->success('登陆成功', 'show'); 19 } 20 } 21 }