JSON

Yii2自定义JSON格式响应

字号+ 作者:H5之家 来源:H5之家 2017-07-06 15:06 我要评论( )

Yii2自定义JSON格式响应[ 2.0 版本 ] 默认是有个JsonResponseFormatter的,但是呢,我们如果做APP的API的话,json响应的格式和内容,每个人的约定都是有差异的,不可能和yii2默认的相一致。 之前通过搜索搜索到的答案是,自己写一个controller的基类,在里面

Yii2自定义JSON格式响应 [ 2.0 版本 ]

默认是有个JsonResponseFormatter的,但是呢,我们如果做APP的API的话,json响应的格式和内容,每个人的约定都是有差异的,不可能和yii2默认的相一致。

之前通过搜索搜索到的答案是,自己写一个controller的基类,在里面的init方法里面给Response对象的EVENT_BEFORE_SEND事件注册一个处理函数。

在那个处理函数里面对$response->data根据我们的要求再次进行格式化,类似下面这样:

//发送结果之前,自定义处理一下,只会对非标准的输出再做格式化 Yii::$app->getResponse()->on(Response::EVENT_BEFORE_SEND, [ResponseFormater::getInstance(), 'process']);

ResponseFormater类是我们自己写的用来再次格式话响应数据的。

然后所有的controller继承上面的那个基类。

上面的方法有个不足的地方就是,如果在url里面随便输入一个不存在的controller的话,上面我们的那个注册事件是不会执行的,就会还是会响应yii2默认的响应内容和格式。

我们可以这样做。

重新写一个json格式化类,继承默认的\yii\web\JsonResponseFormatter,然后我们只需要重写formatJson方法即可。

然后在配置文件里面配置:

'response' => [ 'format' => 'json', 'formatters' => [ 'json' => 'api\components\ApiJsonResponse', ], ],

api\components\ApiJsonResponse就是我们重写formatJson方法的类。

这样子,不管怎么样,都会输出我们自己所约定的好格式了。

bizrule RBAC

共 2 条评论

  • 两首童谣 评论于 2016-12-21 10:13

    不太懂,噢噢

  • drykiss 评论于 2017-03-09 10:54

    把你写的发来瞧瞧啊

  • 发表评论

    您需要登录后才可以评论。登录 | 立即注册

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • React系列学习笔记:5.PC与MAC通用package.json配置

      React系列学习笔记:5.PC与MAC通用package.json配置

      2017-07-06 17:01

    • structs2刚开始学习,用json时,遇到了问题,希望各位能帮忙解决

      structs2刚开始学习,用json时,遇到了问题,希望各位能帮忙解决

      2017-07-06 15:01

    • 一种基于JSON的Modbus远程通信实现方式

      一种基于JSON的Modbus远程通信实现方式

      2017-07-06 08:04

    • Swift语言中如何使用JSON数据教程

      Swift语言中如何使用JSON数据教程

      2017-07-05 17:00

    网友点评