zoukankan      html  css  js  c++  java
  • YII修改Exception返回值为任意格式

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

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

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

    {
        "Exception": [
            {
                "code": -3,
                "name": "decryption error"
            }
        ]
    }
    

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

            
       //使用如下格式抛出异常,抛出的异常继承自UserException(YII用来抛出用户定制的异常)
    throw new UserException(Yii::$app->ZYKException->errorMessage(-6));

    //在此处array中为字符串: {"Exception":[{"code":-3,"name":"decryption error"}]},传递字符串而不是直接传递数组的原因是,异常的message必须是字符串类型
    if($exception instanceof UserException) { $array = json_decode($exception->getMessage(), true); } else { $array = [ 'name' => ($exception instanceof Exception || $exception instanceof ErrorException) ? $exception->getName() : 'Exception', 'message' => $exception->getMessage(), 'code' => $exception->getCode(), ]; }

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

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

  • 相关阅读:
    编译用到boost相关的东西,问题的解决;以及和googletest库
    看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
    centos5 升级到centos6
    Go vs Erlang
    Graphviz
    Oracle相关安装经验总结
    学习erlang书籍
    sublime使用总结
    List集合五种遍历方式
    nginx常用命令
  • 原文地址:https://www.cnblogs.com/wlemory/p/4757931.html
Copyright © 2011-2022 走看看