#### 1. 拷貝框架自帶的 `應(yīng)用異常處理類`, 另存一份 --- 復(fù)制 `app/ExceptionHandle.php`, 另存為 `app/ApiExceptionHandle.php` 在 `ApiExceptionHandle.php` 中的 `render()` 方法中 `自定義異常處理機(jī)制` ```php public function render($request, Throwable $e): Response { // 添加自定義異常處理機(jī)制 if (app('http')->getName() === 'api') { // http請(qǐng)求異常處理 if ($e instanceof HttpException) { return $this->json($e->getMessage(), $e->getStatusCode()); } // 無效參數(shù)異常 if ($e instanceof \InvalidArgumentException) { return $this->json($e->getMessage()); } // 驗(yàn)證器異常處理機(jī)制 if ($e instanceof ValidateException) { fault($e->getMessage()); } // 其他異常處理(不是自己手動(dòng)拋出的異常) if (!empty($e->getMessage())) { return $this->json($e->getMessage(), $e->getCode()); } } // 其他錯(cuò)誤交給系統(tǒng)處理 return parent::render($request, $e); } /** * 返回json數(shù)據(jù) * * @param string $msg 描述信息 * @param integer $code 狀態(tài)碼 */ private function json(string $msg, int $code = 201) { return json(compact('code', 'msg')); } ``` 自定義異常類可放在全局容器Provider定義文件, 也可放在應(yīng)用目錄下 全局容器Provider定義文件: `app/provider.php` 應(yīng)用容器Provider定義文件: `app/index/provider.php` ``` <?php // 容器Provider定義文件 return [ // 自定義異常處理 'think\exception\Handle' => app\ApiExceptionHandle::class, ]; ``` #### 2. 自定義拋出異常的函數(shù) --- ```php /** * 拋出錯(cuò)誤 * * @param string $msg * @param integer $code */ function fault(string $msg = "", int $code = 201) { throw new \Exception($msg, $code); } ```