注册异常处理器
yii2也是以 controller/action 的方式定义一个异常处理器的,我们可以在 components=>errorHandler中自定义。
# config/web.php 'components' => [ 'errorHandler' => [ 'errorAction' => 'exception/handler' ] ]
异常处理器
定义相应的异常处理器,app\actions\ErrorApiAction 继承 yii\web\ErrorAction,可以拿到yii2为我们整理好的全局异常。
# controllers/ExceptionController.php [ 'class' => 'app\actions\ErrorApiAction', ] ]; } }
对api友好的错误异常处理器,这里我也只是简单的把响应格式改了一下,异常的上下文还是用yii2自带的处理的。
#actions/ErrorApiAction.php getResponse()->setStatusCodeByException($this->exception); // json 格式返回 Yii::$app->getResponse()->format = Response::FORMAT_JSON; // 返回的内容数据 return [ 'msg' => $this->exception->getMessage(), 'err' => $this->exception->getCode() ]; } }
异常实体
主要是简单的把状态码的传递封装一下,用更容易理解的类名来代理传递。exceptions/HttpException.php
statusCode, $message, $code, $previous); } }
exceptions/HttpForbiddenException.php
exceptions/HttpUnauthorizedException.php
exceptions/HttpForbiddenException.php
exceptions/HttpNotFoundException.php使用范例
在一些
service logic model中根据需要即时抛出异常即可,上层控制器拿到的永远都是正常的返回数据,绝对的2xx响应簇throw new HttpBadRequestException("具体的非法描述", 4001); throw new HttpUnauthorizedException("请认证后访问"); throw new HttpForbiddenException("无权访问"); throw new HttpNotFoundException("请求资源不存在");