Компонент Debug был выпущен в 2013 году для предоставления трех важных функций приложениям Symfony:
- Загрузчик класса отладки для выдачи полезных исключений, когда какой-то класс не найден;
- Обработчик ошибок для отлова ошибок PHP и их преобразования в исключения;
- Обработчик исключений для отлова необработанных исключений PHP и отображения для них удобных страниц ошибок.
Вы просто должны были добавить Debug::enable();
в вашем коде (например, во фронт-контроллере, когда была установлена опция отладки), чтобы включить все эти функции, которые улучшают ваш опыт разработки.
В Symfony 4.4 представили новый компонент под названием ErrorHandler
, который заменяет компонент Debug и предоставляет те же функции более современным и мощным способом.
Основная проблема предыдущего DebugBundle заключается в том, что вам также необходимо установить TwigBundle, чтобы:
- Получать исключения в том же формате, отличном от HTML-запроса
- Получать расширенные страницы ошибок 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 совместимыми с современными стандартами.