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
方法的类。
这样子,不管怎么样,都会输出我们自己所约定的好格式了。
dyllen
注册时间:2014-09-09
最后登录:2020-10-16
在线时长:48小时47分
最后登录:2020-10-16
在线时长:48小时47分
- 粉丝8
- 金钱400
- 威望80
- 积分1680
共 3 条评论
不太懂,噢噢
把你写的发来瞧瞧啊
http://www.yii-china.com/topic/detail/126
和 http://www.yii-china.com/topic/detail/126 相似 具体api\components\ApiJsonResponse 大概就是这样吧