При создании сайта разработчику просто необходимо знать о всех ошибках которые возникают у него на сайте, и Symfony предоставляет удобный отладчик этих самых ошибок.
Вот, например, экран 404 ошибки. В данном случае логи в большинстве случаев не несут никакой полезной информации (при 404 ошибке), но если ошибка 500, то с помощью них можно легко отладить код, узнать где собака зарыта.
При деплое эту страницу надо, разумеется, заменить на более красивую. Но как?
Страницы с ошибками находятся у Symfony в TwigBundle, (vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle) а структура следующая - в корневой папке находится layout.html.twig в котором находится базовый template, а подключаемые, в зависимости от ошибки, находятся в папке Exception.
Окей - с этим разобрались. Приступим к действиям.
Первым делом нужно создать папку app/Resources/TwigBundle/views. Она является папкой в которой переопределяются все view. Мы будем редактировать только базовый шаблон, так как не думаю что вы захотите выводить разные вьюхи на 404 или 500 ошибки.
Создаем в этой папке layout.html.twig, и добавляем в него простое сообщение об ошибке без каких либо данных.
<!DOCTYPE html> <html> <head> </head> <body> Ошибка </body> </html>Теперь при бросании сервером исключения (Exception) мы будем получать белую страницу с надписью "Ошибка".
(по поводу ее красоты пусть беспокоятся дизайнеры и верстальщики. Нам она ни к чему)
Немного не хватает информативности. Надо добавить код, и текст ошибки
В этом нам помогут следующие переменные
- status_code - код ошибки (404, 500)
- status_text - текст ошибки
<!DOCTYPE html> <html> <head> </head> <body> Ошибка {{ status_code }}<br> {{ status_text }} </body> </html>
На это статью можно было бы закончить, еслиб не одно НО.
Как нам теперь отлавливать ошибки?
Тут все тоже не слишком сложно - проверяем в этом файле окружение, и в зависимости от него выводим тот или иной результат.
{% if app.environment == 'dev' %}
Если мы находимся на dev (http://site.com/app_dev.php/), то просто выводим стандартный шаблон, а если нет, то нашу ошибку.
Вот полный код моего layout.html.twig (разумеется до работы над ним дизайнерами и верстальщиками)
{% if app.environment == 'dev' %} <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset={{ _charset }}"/> <meta name="robots" content="noindex,nofollow" /> <title>{% block title '' %}</title> <link href="{{ asset('bundles/framework/css/exception_layout.css') }}" rel="stylesheet" type="text/css" media="all" /> <link href="{{ asset('bundles/framework/css/exception.css') }}" rel="stylesheet" type="text/css" media="all" /> </head> <body> <div id="content"> <div class="header clear_fix"> <div class="header_logo"> <img src="{{ asset('bundles/framework/images/logo_symfony.png') }}" alt="Symfony" /> </div> <div class="search"> <form method="get" action="http://symfony.com/search"> <div class="form_row"> <label for="search_id"> <img src="{{ asset('bundles/framework/images/grey_magnifier.png') }}" alt="Search on Symfony website" /> </label> <input name="q" id="search_id" type="search" placeholder="Search on Symfony website" /> <button type="submit"> <span class="border_l"> <span class="border_r"> <span class="btn_bg">OK</span> </span> </span> </button> </div> </form> </div> </div> {% block body '' %} </div> </body> </html> {% else %} <!DOCTYPE html> <html lang="ru"> <head> </head> <body style="text-align:center;"> Ошибка {{ status_code }}<br> {{ status_text }} </body> </html> {% endif %}
Для того чтобы обрабатывать сообщения об ошибках можно просто воспользоваться функцией мультиязычности в Symfony, но об этом я расскажу в другой статье.
Надеюсь этот небольшой рецепт по Symfony2 был полезен вам.
2015-06-21 14:32
http://symfony.com/blog/new-in-symfony-2-6-error-page-previews