不使用try catch而使用全局异常处理的问题
来源:6-16 登录优化- 控制器业务代码抽离到business层(最新)
帅的被狗撵
2020-11-28
写回答
1回答
-
同学我们可以自定义异常文件,比如ClientException,然后统一异常处理的时候判断下只要是instanceof 属于这个的,就可以给前端看,否则就不给,在business里面的异常使用 throw new ClientException('验证码有误')
<?php declare(strict_types=1); namespace App\Exceptions; use Exception; class WarnException extends Exception { // 状态码 public $status = 500; // 错误提示 public $message = '未知错误'; // 错误码 public $code = 0; // 错误返回给客户端的其他数据 public $data = []; /** * ApiException constructor. * @param array|string $params */ public function __construct($params = []) { is_string($params) && $this->message = $params; if(is_array($params)){ array_key_exists('status',$params) && $this->status = $params['status']; array_key_exists('code',$params) && $this->code = $params['code']; array_key_exists('msg',$params) && $this->message = $params['msg']; array_key_exists('message',$params) && $this->message = $params['message']; array_key_exists('data',$params) && $this->data = $params['data']; } } } if ($exception instanceof ClientException) { // 自定义错误,错误是可以直接展示给客户端的 return returnJson($exception->code, $exception->message, $exception->status, $exception->data); }
022020-12-02
相似问题
关于在哪一层捕获异常的问题
回答 1
关于异常的自然抛出和手动抛出
回答 2