@Ivanoff-i

Как сделать отдельное оформление 404 и других ошибок для модуля Yii2?

В проекте создан модуль api, который предполагает rest архитектуру. Хотелось бы, чтобы при переходе по ссылке `http://site.ru/api/любой набор символов` 404, да и вообще любые ошибки показывались в json формате. А при переходе на `http://site.ru/не api` - в обычном html. Полагаю, здесь urlManager должен быть как-то задействован. Как такое сделать без костылей? Я пока прописал в urlManager в самом конце после всех правил
[
    'api/<all:\w+>' => 'api/default/error',
    'api/<module>/<all:\w+>' => 'api/default/error',
]

Так вроде работает, но может есть более красивый спопоб?

Обновление
Решено следующим способом. Прописал в bootstrap модуля:

if (preg_match('/^\/api\//', Yii::$app->request->url) !== 0) {
    Yii::$app->response->format = Response::FORMAT_JSON;

    Yii::$app->response->on(Response::EVENT_BEFORE_SEND, function($event) {
        /** @var Response $response */
        $response = $event->sender;
        if (isset($response->data['type']) && $response->statusCode !== 200) {
            unset($response->data['type']);
        }
    });
}
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ответы на вопрос 3
qonand
@qonand
Software Engineer
Если у Вас есть два модуля API и не API - можно просто в каждом из модулей установить нужный формат ответа сервера
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Читать www.yiiframework.com/doc-2.0/guide-runtime-handlin...
Конкретно Customizing Error Response Format
Там именно пример с json
Ответ написан
Комментировать
@matperez
Для модуля API установите глобально \Yii::$app->response->format = Response::FORMAT_JSON; все данные, в том числе и ошибки, будут возвращаться в виде чистого json.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы