默认是有个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