当前位置:   article > 正文

YII修改Exception返回值为任意格式

更改exception的返回字段

YII提供的可更改异常返回的格式很有限而且很不灵活,在这里我们需要修改框架的代码来实现。

既然是异常,那么我们就要修改响应的文件:/home/gcheng/workShop/basic/vendor/yiisoft/yii2/web/ErrorHandler

我们的目标是把异常格式改为如下格式:

  1. {
  2. "Exception": [
  3. {
  4. "code": -3,
  5. "name": "decryption error"
  6. }
  7. ]
  8. }

 那么相对与原有的格式我们要去掉默认的code,name和type

  1.    //使用如下格式抛出异常,抛出的异常继承自UserException(YII用来抛出用户定制的异常) throw new UserException(Yii::$app->ZYKException->errorMessage(-6)); //在此处array中为字符串: {"Exception":[{"code":-3,"name":"decryption error"}]},传递字符串而不是直接传递数组的原因是,异常的message必须是字符串类型 if($exception instanceof UserException)
  2. {
  3. $array = json_decode($exception->getMessage(), true);
  4. }
  5. else
  6. {
  7. $array = [
  8. 'name' => ($exception instanceof Exception || $exception instanceof ErrorException) ? $exception->getName() : 'Exception',
  9. 'message' => $exception->getMessage(),
  10. 'code' => $exception->getCode(),
  11. ];
  12. }

 以上的解决方法的确是可以解决任意修改异常格式的功能,但是有一个缺点是无法人为设置HTTP STATUS CODE因为USER EXCEPTION是HTTP EXCEPTION的父类,无法更改子类中的status code。

 如果想同时任意更改返回异常的status code那么就要写一个新的异常类,继承自HTTP EXCEPTION并且在继承类中修改status code

转载于:https://www.cnblogs.com/wlemory/p/4757931.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/90114
推荐阅读
相关标签
  

闽ICP备14008679号