Yii2自定义异常接管 |
您所在的位置:网站首页 › amd2600x针脚定义图 › Yii2自定义异常接管 |
在编写api接口时,不管是正常或者异常我们通常是返回固定格式的json数据,但是Yii2默认输出的异常是以html形式返回的,如下图: 如上图在做api接口时,这样返回非常不友好,直接说怎么改: 1.在web下的index.php与index-test.php关闭调试模式: 2.在config.php中的更改异常接管:
3.在对应目录下创建异常接管类ExceptionHandler: namespace api\exception; use Yii; use yii\web\ErrorHandler; class ExceptionHandler extends ErrorHandler { //状态码 private $code; //错误信息 private $msg; //编码 private $errorCode; public function renderException($exception) { $response = Yii::$app->response; $response->format = \yii\web\Response::FORMAT_JSON; // 异常接管 if ($exception instanceof BaseException) { $this->code = $exception->code; $this->msg = $exception->msg; $this->errorCode = $exception->errorCode; // 关闭日志记录 $this->logException($exception); } else { //开启调试模式 if (YII_DEBUG) { parent::renderException($exception); // TODO: Change the autogenerated stub } else { $this->msg = '系统错误'; $this->errorCode = 999; $this->code = 500; } } $result = [ 'error_code' => $this->errorCode, 'msg' => $this->msg, ]; $response->statusCode = 200; $response->data = $result; $response->send(); } /** * 重写logException * @param \Throwable $exception */ public function logException($exception) { if ($exception instanceof BaseException) { // 不写入日志 return; } parent::logException($exception); } } 4.可以注意到代码中BaseException,是一个自定义异常父类,一般用来抛出一些用户参数或权限错误,BaseException代码如下: namespace app\common\exception; use yii\base\Exception; class BaseException extends Exception { // 状态码 public $code = 200; // 错误信息 public $msg = 'params error'; //错误码 public $errorCode = 1002; public function __construct($params = []) { if (!is_array($params)) { return; } if (array_key_exists('code', $params)) { $this->code = $params['code']; } if (array_key_exists('msg', $params)) { $this->msg = $params['msg']; } if (array_key_exists('errorCode', $params)) { $this->errorCode = $params['errorCode']; } } } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |