在Yii中,您可以使用JSON而不是HTML / XML返回HTTP错误响应吗?

时间:2016-08-09 14:06:14

标签: php angularjs http yii2

如果用户在没有正确凭据的情况下尝试访问REST API,我的yii应用程序会在我的controller.php文件中抛出401错误:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <name>Unauthorized</name><message>Access unavailable.</message>      
  <code>401</code>
  <status>401</status>
  <type>yii\web\UnauthorizedHttpException</type>
</response>

以这种格式返回错误:

{
    "name": "Access unavailable.",
    "message": "You are not authorized.",
    "code": 0,
    "status": 401
}

如何以JSON格式返回此错误?

?:

我的移动应用程序访问此资源需要一个JSON对象。

3 个答案:

答案 0 :(得分:2)

尝试在自定义__construct中添加上面的返回值或更高版本。

 recipe.image.url(:medium)

答案 1 :(得分:1)

yii2休息控制器对“接受”HTTP标头作出反应。如果在此标题中仅存在“application / json”,则来自其他控制器的答案将为JSON

答案 2 :(得分:0)

这对我有用。扩展 activeController 并将其放入 api\controllers\ActiveController.php

namespace api\controllers;
class ActiveController extends yii\rest\ActiveController {

    public function behaviors() {
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator'] = [
            'class' => 'yii\filters\ContentNegotiator',
            'formats' => [
                'application/json' => \yii\web\Response::FORMAT_JSON,
            ]
        ];
        return $behaviors;
    }
}

然后在我的控制器中

use api\controllers\ActiveController;

class blablaController extends ActiveController
{
...
}

现在在未经授权的情况下,我得到一个 JSON 而不是 XML

{"success":false,"data":{"name":"Unauthorized","message":"Your request was made with invalid credentials.","code":0,"status":401}}