#### 1. 什么是空控制器 --- 空控制器的概念是指當系統(tǒng)找不到指定的控制器名稱的時候,系統(tǒng)會嘗試定位當前應用下的空控制器(Error)類,開發(fā)者可以利用這個機制來定制錯誤頁面和進行URL的優(yōu)化。 #### 2. 應用場景 ---- 舉例: 當訪問 **/user/getMine** 時,如果 user 控制器不存在,框架默認會直接拋出錯誤 開啟調(diào)試模式時會拋出異常: **控制器不存在:app\controller\User**,此時可以通過自定義異常處理機制使其返回 **json 數(shù)據(jù)格式** 但是當關(guān)閉調(diào)試模式會提示: **頁面錯誤!請稍后再試~**,對于專門提供接口的 api 應用來說, 接口應該始終返回 json 數(shù)據(jù),而不是 **頁面錯誤!請稍后再試~** 這樣一個頁面,因為沒有異常拋出,所以此時使用自定義異常處理機制也無法使其返回 json 數(shù)據(jù) 使用框架的空控制器可以解決這個問題,使 **api 應用** 始終返回 json 數(shù)據(jù)格式,單應用和多應用模式都支持空控制器。 **創(chuàng)建空控制器** ```php // 單應用模式 php think make:controller Error --plain // 多應用模式 php think make:controller api@Error --plain ``` 使用魔術(shù)方法 `__call` ``` public function __call($method, $args) { $controller = request()->controller(); $action = request()->action(); return json(['code' => 400, 'msg' => "{$controller} 控制器 {$action} 方法不存在"]); } ``` 代碼示例 ![](https://img.itqaq.com/art/content/d70deb65c34eb40a20235316c495c549.png) 請求示例 ![](https://img.itqaq.com/art/content/74ce45791a39d3b0a8353cdc6d89acd6.png)