На каждом проекте не забываем настраивать обработчики ошибок, а то получим вот такие сюрпризы на продакшен сервере для страниц ошибок 404 и 500:
Настройка собственного действия и шаблона ошибки 404
1) Активируем опции error_404_module и error_404_action в конфигурационном файле settings.yml
all: .actions: error_404_module: error # Указываем наш модуль error_404_action: error404 # и действие
2) Создаем наш шаблон ошибки 404 error404Success.php
<html> <head> <title>Ошибка 404</title> </head> <body> Упс! Страница не найдена! </body> </html>
3) Очищаем кеш проекта
php symfony cc
Учтите, что в dev-режиме отработает обработчик ошибки 404 Symfony, а не наш. Такой небольшой нюанс.
Выводим собственную страницу для ошибок 500
За это отвечает файл error.html.php. Оригинал файла можно найти в исходниках Symfony «/symfony-1.2/lib/exception/data/error.html.php». Файл надо создать в папке нашего проекта «config/error/error.html.php»
Настраиваем собственный шаблон страницы при отключении нашего приложения (application)
Когда это может потребоваться? Например, Вам требуется обновить Ваш сайт, и это заберет некоторое время. В этом случае отключаем наш сайт и выводим красивую страничку, мол у нас проводятся «технические работы». Весьма полезная штука.
Что надо чтобы отключить/включить наше приложение:
1) Создаем свой шаблон unavailable.php и кладем его в одну из следующих директорий:
• /site/apps/frontend/config/unavailable.php
• /site/config/unavailable.php
• /site/config/web/errors/unavailable.php
Тут есть один момент. Можно спросить: «А зачем нам сохранять файл в папке frontend?». Это весьма полезная особенность, т.к. в этом случае мы можем изменить вывод этой страницы для www и wap, что очень важно.
2) Включаем опцию check_lock в файле settings.yml. После того как закончили все работы и включили приложение, не забудьте отключить эту опцию, т.к. при каждой загрузке страницы осуществляется проверка состояния приложения.
.settings: check_lock: on
3) Отключаем наше приложение
php symfony project:disable frontend prod
4) Очищаем кеш проекта и наше приложение отключено
php symfony cc
Для включения приложения выполняем следующие команды:
php symfony project:enable frontend prod php symfony cc
Что классно, то что frontend_dev.php — не отключается, т.е. можно проверить работу сайта в отладочном режиме, или отключить и этот режим. Не забываем удалять этот файл на продакшен сервере :).
Материал по теме:
• The Definitive Guide to symfony: Chapter 6 — Inside The Controller Layer
• The Definitive Guide to symfony: Chapter 19 — Mastering Symfony’s Configuration Files
• The symfony Cookbook: How to customize Error Templates
• Completely custom Symfony error pages
Март 19th, 2009 at 12:06
Еще для реализации страниц ошибок можно не ковырять настройки, а просто создать модуль default и переопределить нужные нам шаблоны. Для 500 ошибки такое не сработает, конечно…
Март 19th, 2009 at 12:28
А настройки как раз и переопределяют модуль error_404_module. Все делается штатным механизмом Симфони, и когда вызываем метод «$this->forward404()», то редиректим на свою страницу 404.
Март 19th, 2009 at 13:32
Вместо отключения сайта через командлайн проще в index.php написать первой строкой
die(‘Сайт временно остановлен. Возвращайтесь через несколько минут.’);
при этом так же index_dev.php будет работать.
Так-то!
Март 19th, 2009 at 13:48
Это да, но это не есть самый красивый вариант.
Ничто не мешает сделать эту страничку, такую же как и 404, в стиле сайта, а не просто на белом экране фраза: «Сайт временно остановлен. ..».
Плюс ещё один момент, если вдруг, что-то сломается на сайте, то пользователи увидят ту же страницу «unavailable.php «, а не стандартную ошибку Симфони.
Март 23rd, 2009 at 00:24
Спасибо за пост!
Теперь нормально все настроил в своем проекте
404 настроил сразу под свой модуль, а 500 долго ковырял, т.к. сперва пытался сделать по древнему faq от 1.0 симфони.