[TOC] #### 1. 定義公共基礎(chǔ)控制器 --- **定義應(yīng)用的公共控制器 `Base.php`** ```php <?php declare(strict_types=1); namespace app\admin\controller; use app\BaseController; /** * admin 應(yīng)用基礎(chǔ)控制器 */ class Base extends BaseController { // 初始化 protected function initialize() { $this->prefix = 'aiaad'; $this->home = '/admin/index'; $this->login = '/admin/login'; } /** * 檢測是否登錄 * * @return bool true 已登錄 false 未登錄 */ protected function checkLogin() { return session('?' . $this->prefix); } // +----------------------------------------------------------- // | 登錄、退出 // +----------------------------------------------------------- /** * 登錄成功 */ protected function sign($data) { session($this->prefix, $data); $this->homePage(); } /** * 退出登錄 */ protected function logout() { session($this->prefix, null); $this->loginPage(); } // +----------------------------------------------------------- // | 重定向 // +----------------------------------------------------------- /** * 重定向到登陸頁 */ protected function loginPage() { $this->redirect($this->login); } /** * 重定向到后臺主頁 */ protected function homePage() { $this->redirect($this->home); } /** * 解決基初始化方法中無法重定向問題 * * @param ...$args redirect助手函數(shù)參數(shù) */ private function redirect(...$args) { throw new \think\exception\HttpResponseException(redirect(...$args)); } } ``` #### 2. 定義用于校驗登錄狀態(tài)控制器 `Auth.php` (未登錄重定向到登陸頁) --- ```php <?php declare(strict_types=1); namespace app\Admin\controller; /** * 基礎(chǔ)控制器處理登陸狀態(tài)校驗 * * 需要校驗登陸狀態(tài)的控制器繼承當前控制器即可 */ class Auth extends Base { // 初始化 protected function initialize() { // 調(diào)用父類初始化方法 parent::initialize(); // 未登錄跳轉(zhuǎn)到登陸頁面 $this->checkLogin() || $this->loginPage(); } } ``` #### 3. 登錄相關(guān)方法, 已登錄訪問控制器方法重定向到后臺主頁 ```php <?php declare(strict_types=1); namespace app\admin\controller; /** * 處理登錄相關(guān)方法 */ class Login extends Base { /** * 初始化方法 * * 已經(jīng)登錄再訪問登陸頁面重定向到后臺主頁 */ protected function initialize() { // 調(diào)用父類初始化方法 parent::initialize(); // 已經(jīng)登錄訪問登錄頁重定向到后臺主頁 $this->checkLogin() && $this->homePage(); } /** * 登錄接口 */ public function index() { // ... 登錄邏輯 // 登錄成功后重定向到后臺主頁 $data = ['id' => mt_rand(1, 999), 'name' => '張三']; $this->sign($data); } } ```