Новое в Symfony 4.4: Компонент ErrorHandler

Компонент Debug был выпущен в 2013 году для предоставления трех важных функций приложениям Symfony:

  • Загрузчик класса отладки для выдачи полезных исключений, когда какой-то класс не найден;
  • Обработчик ошибок для отлова ошибок PHP и их преобразования в исключения;
  • Обработчик исключений для отлова необработанных исключений PHP и отображения для них удобных страниц ошибок.

Вы просто должны были добавить Debug::enable(); в вашем коде (например, во фронт-контроллере, когда была установлена ​​опция отладки), чтобы включить все эти функции, которые улучшают ваш опыт разработки.

В Symfony 4.4 представили новый компонент под названием ErrorHandler, который заменяет компонент Debug и предоставляет те же функции более современным и мощным способом.

Основная проблема предыдущего DebugBundle заключается в том, что вам также необходимо установить TwigBundle, чтобы:

  1. Получать исключения в том же формате, отличном от HTML-запроса
  2. Получать расширенные страницы ошибок HTML.

Это было не только громоздко, но и запутанно для приложений только для API, которые не используют Twig.

Новый компонент ErrorHandler всегда генерирует исключения в том же формате, что и запрос, и он не требует использования Twig. Это вносит некоторые изменения, которые описаны в руководстве по обновлению Symfony 4.4.

Наиболее важным изменением является то, что вы больше не можете настраивать страницы ошибок для форматов, отличных от HTML, используя шаблоны Twig (например, templates/bundles/TwigBundle/Exception/error403.json.twig). Если формат запроса — JSON, XML, ATOM или TXT, страницы исключений соответствуют стандарту RFC 7807 и имеют следующую структуру (в следующем примере показана только структура JSON):

{
    "title": "Not Found",
    "status": 404,
    "detail": "Sorry, the page you are looking for could not be found"
}

Если вы хотите переопределить этот контент, вы должны добавить компонент Serializer в ваш проект и создать собственный нормализатор, как описано в документации.

Другое важное изменение связано с функцией предварительного просмотра страницы ошибок. Хотя эта функция продолжает работать, как и раньше, некоторые файлы изменили свое местоположение, поэтому вам необходимо внести следующие изменения в конфигурацию вашего проекта:

- # config/routes/dev/twig.yaml
+ # config/routes/dev/framework.yaml
_errors:
-     resource: '@TwigBundle/Resources/config/routing/errors.xml'
+     resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
    prefix:   /_error

Таким образом, новый компонент ErrorHandler сохраняет все замечательные функции компонента Debug, но удаляет зависимость Twig и делает исключения Symfony совместимыми с современными стандартами.