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

За обработку ошибок отвечает 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, который будет генерировать ответ с информацией об ошибке.

Доступные генераторы ответов:

Чтобы использовать другой генератор ответов, нужно изменить 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\ErrorHandler\ErrorListenerInterface, и добавить его объект в обработчик ошибок.

# Дополнительная функциональность

Доступны два обработчика запросов, которые возвращают ответ с 404 Not Found ошибкой:

Эти обработчики используются экземпляром приложения, если не было найдено совпадений с текущим маршрутом.

Для удобства созданы несколько HTTP-исключений.

Смело бросайте эти исключения в своем коде. Обработчик ошибок поймает их и подставит код состояния и фразу причины ошибки в генерируемый ответ. Если будет брошено исключение с кодом, который не является допустимым кодом состояния HTTP-ответа (например: new throw \RuntimeException();), то будет сгенерирован ответ со статусом 500 Internal Server Error.