#### 1. 拷贝框架自带的 `应用异常处理类`, 另存一份 --- 复制 `app/ExceptionHandle.php`, 另存为 `app/ApiExceptionHandle.php` 在 `ApiExceptionHandle.php` 中的 `render()` 方法中 `自定义异常处理机制` ```php public function render($request, Throwable $e): Response { // 添加自定义异常处理机制 if (app('http')->getName() === 'api') { // http请求异常处理 if ($e instanceof HttpException) { return $this->json($e->getMessage(), $e->getStatusCode()); } // 无效参数异常 if ($e instanceof \InvalidArgumentException) { return $this->json($e->getMessage()); } // 验证器异常处理机制 if ($e instanceof ValidateException) { fault($e->getMessage()); } // 其他异常处理(不是自己手动抛出的异常) if (!empty($e->getMessage())) { return $this->json($e->getMessage(), $e->getCode()); } } // 其他错误交给系统处理 return parent::render($request, $e); } /** * 返回json数据 * * @param string $msg 描述信息 * @param integer $code 状态码 */ private function json(string $msg, int $code = 201) { return json(compact('code', 'msg')); } ``` 自定义异常类可放在全局容器Provider定义文件, 也可放在应用目录下 全局容器Provider定义文件: `app/provider.php` 应用容器Provider定义文件: `app/index/provider.php` ``` <?php // 容器Provider定义文件 return [ // 自定义异常处理 'think\exception\Handle' => app\ApiExceptionHandle::class, ]; ``` #### 2. 自定义抛出异常的函数 --- ```php /** * 抛出错误 * * @param string $msg * @param integer $code */ function fault(string $msg = "", int $code = 201) { throw new \Exception($msg, $code); } ```