JsonErrorHandler - кастомный обработчик ошибок

Класс core\infrastructure\handler\JsonErrorHandler расширяет стандартный yii\web\ErrorHandler и переопределяет метод renderException(). Его задача - всегда возвращать ответ в формате JSON с единообразной структурой.

Принцип работы

  1. Получает текущий объект response или создаёт новый.
  2. Устанавливает формат Response::FORMAT_JSON.
  3. Определяет HTTP-статус:
    • Если исключение является наследником HttpException, берёт его код.
    • Иначе - 500.
  4. Формирует сообщение:
    • Берёт $exception->getMessage(), если пусто - Internal Server Error.
  5. Получает детали:
    • Если у исключения есть метод getDetails(), вызывает его.
  6. В режиме отладки (YII_DEBUG) добавляет trace (уровень DEBUG_LVL ≥ 1) и request (уровень ≥ 2).
    • trace - массив с файлами, строками, функциями.
    • request - метод, URL, заголовки, тело запроса.
    • При DEBUG_LVL == 3 в trace добавляются аргументы.
  7. Логирует исключение в канал api через Yii::error().
  8. Устанавливает код статуса и данные ответа в виде ErrorDto.
  9. Отправляет ответ.

Настройка уровней отладки (DEBUG_LVL)

Пример ответа

{
    "error": {
        "code": 404,
        "message": "Not Found",
        "details": {
            "trace": [...],
            "request": {
                "method": "GET",
                "url": "/api/users",
                "headers": {...},
                "body": ""
            }
        }
    }
}