默认是有个JsonResponseFormatter
的,但是呢,我们如果做APP的API的话,json响应的格式和内容,每个人的约定都是有差异的,不可能和yii2默认的相一致。
之前通过搜索搜索到的答案是,给Response
对象的EVENT_BEFORE_SEN
事件注册一个处理函数,在发送结果之前再处理一下。
原文链接:https://github.com/yiisoft/yii2/blob/master/docs/guide-zh-CN/rest-error-handling.md
主要代码如下:
return [ // ... 'components' => [ 'response' => [ 'class' => 'yii\web\Response', 'on beforeSend' => function ($event) { $response = $event->sender; if ($response->data !== null && !empty(Yii::$app->request->get('suppress_response_code'))) { $response->data = [ 'success' => $response->isSuccessful, 'data' => $response->data, ]; $response->statusCode = 200; } }, ], ], ];
按照上面的方法,需要在配置文件里面写函数,总感觉不好啊!配置就是配置,写什么逻辑嘛!
然后我就是写了个基类,在里面注册事件:
//发送结果之前,自定义处理一下 Yii::$app->getResponse()->on(Response::EVENT_BEFORE_SEND, [ResponseFormater::getInstance(), 'process']);
后面我发现可以还有其他方式。
重新写一个json格式化类,继承默认的\yii\web\JsonResponseFormatter
,然后我们只需要重写formatJson
方法即可。
然后在配置文件里面配置:
'response' => [ 'format' => 'json', 'formatters' => [ 'json' => 'api\components\ApiJsonResponse', ], ],
api\components\ApiJsonResponse
就是我们重写formatJson
方法的类。
这样子就好了,好看多了。
本来链接:https://360us.net/article/50.html