Yii2 Rest Api自定义错误响应

时间:2016-02-25 11:12:27

标签: php api rest yii2

我正在使用Yii2开发REST API,我正在尝试自定义error response。默认情况下,如果我在提交请求时使用了错误的凭据,我会看到:

{
    "name": "Unauthorized",
    "message": "You are requesting with an invalid credential.",
    "code": 0,
    "status": 401
}

我在哪里以及如何删除codename行?

2 个答案:

答案 0 :(得分:2)

在您的应用程序配置中尝试此代码。

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  framework: 'jasmine2',
  specs: ['todo-spec.js'],


  onPrepare: function() {
 browser.get('http://tmpcmamva07:8888/');
 browser.driver.manage().window().maximize();
 jasmine.DEFAULT_TIMEOUT_INTERVAL = 90000;
    element(by.model('username')).sendKeys('nagabhup');
    element(by.model('password')).sendKeys('welcomE@123');
    element(by.buttonText('Login')).click();
    browser.sleep(2000);
    browser.waitForAngular();
}
};

了解更多Details

答案 1 :(得分:0)

我有新的解决方案:

return [
    // ...
    'components' => [
        'response' => [
            'format' => yii\web\Response::FORMAT_JSON,
            'charset' => 'UTF-8',
            'class' => 'yii\web\Response',
            'on beforeSend' => function ($event) {
                $response = $event->sender;

                // exception with http code != 200 and 302
                if ($response->statusCode !== 200 && $response->statusCode !== 302) {
                    $response->data = [
                        'success' => $response->isSuccessful,
                        'message' => YII_DEBUG ?$response->data: 'System error'
                    ];
                    $response->statusCode = 200;
                }
                // normal response
                else{
                    // both case: controller implement Controller or ActiveController
                    $result =  [
                        'success' => isset($response->data['success'])?$response->data['success']: true
                    ];

                   // check message is set
                if (isset($response->data['message'])){
                    $result = array_merge($result, ['message' => $response->data['message']]);
                }
                else{
                    // check data is set
                    // both case: controller implement Controller or ActiveController
                    if (isset($response->data['data']))
                        $result = array_merge($result, ['data' => $response->data['data']]);
                    else{
                        $result = array_merge($result, ['data' => $response->data]);
                    }
                }

                    $response->data = $result;
                    $response->statusCode = 200;
                }
            },
        ]
    ],
];