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