Skip to content

Latest commit

 

History

History
66 lines (59 loc) · 2.83 KB

268-269 Обработка ошибок.md

File metadata and controls

66 lines (59 loc) · 2.83 KB

Обработка ошибок

Иногда может потребоваться настроить Формат ответа об ошибке по умолчанию. Например, нам нужно знать метку времени ответа и успешность ответа. Фреймворки предоставляют простой способ сделать это.

Подготовка

Повторите все шаги из создания рецепта сервера REST в разделе Подготовка и Как это сделать....

Как это сделать...

Для достижения этой цели можно ответить на событие beforeSend компонента response в @app/config/web.php, следующим образом:

' 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 "https://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 "https://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"}}

Мы изменили содержимое ответа перед отправкой. Таким образом, легко определить, является ли ответ успешным или нет.

Смотрите так же

Для получения дополнительной информации обратитесь к https://www.yiiframework.com/doc-2.0/guide-rest-error-handling.html. По русски https://yiiframework.domain-na.me/doc/guide/2.0/ru/rest-error-handling