定義中間件 可以通過命令行指令快速生成中間件 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 。
控制器中使用

插入一行代碼:
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 }