# Обработка ошибок
За обработку ошибок отвечает HttpSoft\ErrorHandler\ErrorHandlerMiddleware из пакета HttpSoft\ErrorHandler. Этот посредник рекомендовано регистрировать в конвейер первым, чтобы при возникновении ошибки в следующих посредниках, обработчик ошибок смог ее перехватить.
/**
* @var HttpSoft\Basis\Application $app
*/
$app->pipe(HttpSoft\ErrorHandler\ErrorHandlerMiddleware::class);
// Другие посредники.
$app->pipe(ErrorOccurredMiddleware::class);
// Другие посредники.
Для удобства создания экземпляра посредника была добавлена фабрика App\Infrastructure\Http\ErrorHandlerMiddlewareFactory.
# Генераторы ответов
HttpSoft\ErrorHandler\ErrorHandlerMiddleware принимает в конструктор экземпляр HttpSoft\ErrorHandler\ErrorResponseGeneratorInterface, который будет генерировать ответ с информацией об ошибке.
Доступные генераторы ответов:
- HttpSoft\Basis\ErrorHandler\ErrorResponseGenerator — генерирует ответ с информацией об ошибке в соответствии с аргументами, переданными в конструктор.
- HttpSoft\Basis\ErrorHandler\ErrorJsonResponseGenerator (используется по умолчанию) — генерирует ответ с информацией об ошибке в JSON-формате.
- App\Infrastructure\Http\WhoopsErrorResponseGenerator (только для режима отладки) — генерирует красивый интерфейс с подробной информацией об ошибке , используя пакет filp/whoops.
Чтобы использовать другой генератор ответов, нужно изменить App\Infrastructure\Http\ErrorHandlerMiddlewareFactory.
$errorHandler = new ErrorHandlerMiddleware(new ErrorJsonResponseGenerator($container->get('config')['debug']));
// Заменить на:
$errorHandler = new ErrorHandlerMiddleware(new WhoopsErrorResponseGenerator());
Чтобы использовать собственный генератор ответов, вам необходимо создать класс, реализующий HttpSoft\ErrorHandler\ErrorResponseGeneratorInterface, и передать его объект в конструктор при создании HttpSoft\ErrorHandler\ErrorHandlerMiddleware.
# Слушатели ошибок
Слушатели ошибок добавляются обработчиком ошибок, используя метод HttpSoft\ErrorHandler\ErrorHandlerMiddleware::addListener() и срабатывают только при возникновении ошибки.
Доступные слушатели ошибок:
- HttpSoft\Basis\ErrorHandler\LogErrorListener — логирует информацию об ошибке.
Можно добавлять сколько угодно собственных слушателей ошибок. Для этого необходимо создать класс, реализующий HttpSoft\ErrorHandler\ErrorListenerInterface, и добавить его объект в обработчик ошибок.
# Дополнительная функциональность
Доступны два обработчика запросов, которые возвращают ответ с 404 Not Found
ошибкой:
- HttpSoft\Basis\Handler\NotFoundHandler — возвращает ответ в соответствии с аргументами, переданными в конструктор.
- HttpSoft\Basis\Handler\NotFoundJsonHandler (используется по умолчанию) — возвращает ответ в JSON-формате.
Эти обработчики используются экземпляром приложения, если не было найдено совпадений с текущим маршрутом.
Для удобства созданы несколько HTTP-исключений.
Смело бросайте эти исключения в своем коде. Обработчик ошибок поймает их и подставит код состояния и фразу причины ошибки в генерируемый ответ. Если будет брошено исключение с кодом, который не является допустимым кодом состояния HTTP-ответа (например: new throw \RuntimeException();
), то будет сгенерирован ответ со статусом 500 Internal Server Error
.