实际的错误返回格式 :
{
"name": "Not Found",
"message": "页面未找到。",
"code": 0,
"status": 404,
"type": "yii\\web\\NotFoundHttpException",
"previous": {
"name": "Invalid Route",
"message": "Unable to resolve the request \"v1/study/search/1\".",
"code": 0,
"type": "yii\\base\\InvalidRouteException"
}
}
我想要的返回格式:
{
"success": false,
"data": {
"name": "Not Found Exception",
"message": "The requested resource was not found.",
"code": 0,
"status": 404
}
}
我的返回配置:
'components' => [
'response' => [
'format' => \yii\web\Response::FORMAT_JSON,
],
//以下按照官方文档配置,未启作用
// '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;
// }
// },
// ],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
这个问题,其实我们在rest实战一文中说的已经非常清楚了,当然只有付费用户才可以阅读。
解决的核心就是yii\web\Response::EVENT_BEFORE_SEND事件的实现