错误处理

有时你希望自定义默认的错误处理格式。例如,我们需要知道响应时间戳,以及响应是否是成功的。框架提供了一个很简单的方式来做到这点。

准备

重复创建一个REST服务器小节中准备如何做...的所有步骤。

如何做...

为了达到这个目标,你可以响应@app/config/web.php中的respond to the beforeSend event of the response组件:

'response' => [
    'class' => 'yii\web\Response',
    'on beforeSend' => function ($event) {
        $response = $event->sender;
        if ($response->data !== null) {
            $response->data = [
                'success' => $response->isSuccessful,
                'timestamp' => time(),
                'path' => Yii::$app->request->getPathInfo(),
                'data' => $response->data,
            ];
        }
    },
],

工作原理...

为了了解代码中发生了什么,我们来试一下。首先,在控制台中运行如下代码:

curl -i "http://yii-book.app/films/1"

你将得到如下输出:

HTTP/1.1 200 OK
Date: Thu, 24 Sep 2015 04:24:52 GMT
Server: Apache
X-Powered-By: PHP/5.5.23
Content-Length: 115
Content-Type: application/json; charset=UTF-8
{"success":true,"timestamp":1443068692,"path":"films/
1","data":{"id":1,"title":"Interstellar","release_year":2014}}

然后,在控制台中运行如下代码:

curl -i "http://yii-book.app/films/1000"

你将得到如下代码:

HTTP/1.1 404 Not Found
Date: Thu, 24 Sep 2015 04:24:26 GMT
Server: Apache
X-Powered-By: PHP/5.5.23
Content-Length: 186
Content-Type: application/json; charset=UTF-8
{"success":false,"timestamp":1443068666,"path":"films/
1000","data":{"name":"Not Found","message":"Object not found:
1000","code":0,"status":404,"type":"yii\\web\\NotFoundHttpException"}
}

我们在发送响应内容前做了修改。这中方法很容易定义响应是否成功。

参考

欲了解更多信息,参考http://www.yiiframework.com/doc-2.0/guide-rest-error-handling.html

results matching ""

    No results matching ""