JsonErrorHandler - кастомный обработчик ошибок
Класс core\infrastructure\handler\JsonErrorHandler расширяет стандартный yii\web\ErrorHandler и переопределяет метод renderException(). Его задача - всегда возвращать ответ в формате JSON с единообразной структурой.
Принцип работы
- Получает текущий объект
responseили создаёт новый. - Устанавливает формат
Response::FORMAT_JSON. - Определяет HTTP-статус:
- Если исключение является наследником
HttpException, берёт его код. - Иначе - 500.
- Если исключение является наследником
- Формирует сообщение:
- Берёт
$exception->getMessage(), если пусто -Internal Server Error.
- Берёт
- Получает детали:
- Если у исключения есть метод
getDetails(), вызывает его.
- Если у исключения есть метод
- В режиме отладки (
YII_DEBUG) добавляетtrace(уровеньDEBUG_LVL≥ 1) иrequest(уровень ≥ 2).trace- массив с файлами, строками, функциями.request- метод, URL, заголовки, тело запроса.- При
DEBUG_LVL == 3вtraceдобавляются аргументы.
- Логирует исключение в канал
apiчерезYii::error(). - Устанавливает код статуса и данные ответа в виде
ErrorDto. - Отправляет ответ.
Настройка уровней отладки (DEBUG_LVL)
0- только стандартный Yii2 debug (если включён).1- добавляетtraceв детали ошибки.2- добавляетrequest(метод, URL, заголовки, тело).3- добавляет аргументы в каждый элементtrace.
Пример ответа
{
"error": {
"code": 404,
"message": "Not Found",
"details": {
"trace": [...],
"request": {
"method": "GET",
"url": "/api/users",
"headers": {...},
"body": ""
}
}
}
}