По мотивам Check if your symfony application is ready for deployment
Небольшой сборник рецептов (или же мини тестов), которые желательно выполнять перед развертыванием symfony-проектов.
Страница “Oops! Page Not Found”
Когда запрошенный URL не соответствует ни одному маршруту или когда вызывается sfError404Exception, symfony пытается отобразить действие default/error404:
Для того чтобы облагородить эту страницу, добавьте метод executeError404() в класс apps/frontend/modules/default/actions/actions.class.php:
/** * Error page for page not found (404) error * */ public function executeError404() { }
После этого создайте шаблон apps/frontend/modules/default/templates/error404Success.php. Если хотите, можете взять оригинальный файл и модифицировать его под ваш дизайн.
Теперь нужно протестировать, как будет выглядеть ваша страничка 404. Возьмите одно из действий проекта, которое работает и добавьте в его начале строку:
// тестовый эксепшн throw new sfError404Exception('Only for test, don\'t forget to remove it!');
После этого вы можете протестировать соответствующую страницу в продуктовом окружении. Если в вашем приложении модуль default защищен – нужно убедиться, что действие error404 не является защищенным: в файле apps/frontend/modules/default/config/security.yml проверяем (или добавляем) следующие стоки:
error404: is_secure: false
Вы также можете использовать другой модуль. Для этого модифицируйте apps/frontend/config/settings.yml:
all:
.actions:
error_404_module: foo # To be called when a 404 error is raised
error_404_action: bar # Or when the requested URL doesn't match any routeПосле этого остается только очистить кэш:
php symfony cc
Страница “Oops! An Error Occurred”
Эта страница отображается в продуктовом окружении когда symfony перехватывает ошибку.
Symfony ищет файл error.html.php и у вас есть выбор, где его разместить:
- В
mySfProject/apps/frontend/config/error/error.html.php. Имеет смысл в случае, когда у вас планируется отдельная версия для каждого приложения (app). - В
mySfProject/config/error/error.html.php.
Если хотите, вы можете взять оригинальный файл и изменить его.
Для того чтобы протестировать страницу ошибки в любое действие добавьте строку:
throw new Exception('Only for test, don\'t forget to remove it!');
Протестируйте соответствующую страницу в продуктовом окружении.
Страница “Login Required”
Когда неаутентифицированный пользователь пытается открыть страницу, которая объявлена как secure в security.yml, symfony пытается отобразить действие default/login:
Для того чтобы изменить внешний вид этой страницы, добавьте метод executeLogin() в класс apps/frontend/modules/default/actions/actions.class.php:
/** * Warning page for restricted area - requires credentials */ public function executeLogin() { }
Затем нужно создать шаблон apps/frontend/modules/default/templates/loginSuccess.php.
Если хотите, можете взять оригинальный файл и модифицировать его.
Для того, чтобы протестировать эту страницу нужно:
- Перейти в продуктовое окружение
- Разлогиниться (используйте линк logout или же, если у вас его нет, удалите все куки для домена с вашим приложением (в firefox можете воспользоваться плагином web developer)).
- Откройте защищенную страницу.
Используем отдельный модуль. Для этого модифицируем apps/frontend/config/settings.yml:
all:
.actions:
login_module: foo # To be called when a non-authenticated user
login_action: bar # Tries to access a secure pageУбедитесь, что foo::bar не защищенное действие (мы ведь хотим показывать эту страницу незалогинившимся пользователям!) – проверьте или добавьте в apps/frontend/modules/foo/config/security.yml следующие строки:
bar: is_secure: false
После не забудьте очистить кэш:
php symfony cc
Соответствующая документация для 1.2, для 1.4 doctrine, 1.4 propel.
Страница “Credentials Required”
Когда пользователь не имеет необходимых прав доступа (credentials) для действия, symfony пытается отобразить действие default/secure:
Для того чтобы настроить внешний вид этой страницы, добавьте метод executeSecure() в apps/frontend/modules/default/actions/actions.class.php:
/** * Warning page for restricted area - requires login */ public function executeSecure() { }
и создайте шаблон apps/frontend/modules/default/templates/secureSuccess.php. Если хотите, можете взять оригинальный файл и модифицировать его.
Теперь нужно протестировать экшен. Для этого нужно:
- Перейти в продуктовое окружение
- Войти в систему, но не как super admin
- Для одного из модулей добавить в
apps/frontend/modules/yourModule/config/security.yml: - Очистить кэш
- Открыть любое из действий данного модуля
all: credentials: [ aCredentialYouDontHave ]
Если вы хотите использовать другой модуль, модифицируйте apps/frontend/config/settings.yml:
all:
.actions:
secure_module: foo # To be called when a user doesn't have
secure_action: bar # The credentials required for an actionИ очистите кэш
php symfony cc
Страница “This Module is Unavailable”
Когда пользователь пытается вызвать действие из модуля, который объявлен как disabled, symfony пытается отобразить действие default/disabled:
Для того чтобы настроить внешний вид этой страницы, добавьте метод executeDisabled() в apps/frontend/modules/default/actions/actions.class.php:
/** * Module disabled * */ public function executeDisabled() { }
и создайте шаблон apps/frontend/modules/default/templates/disabledSuccess.php. Если хотите, можете взять оригинальный файл и модифицировать его.
Теперь нужно протестировать отключенный модуль. Для этого нужно:
- Перейти в продуктовое окружение
- Для одного из модулей добавить в
apps/frontend/modules/yourModule/config/module.yml: - Очистить кэш
- Открыть любое из действий данного модуля
all: enabled: false
Если default модуль защищен, убедитесь что действие disabled доступно пользователям – проверьте или добавьте в apps/frontend/modules/default/config/security.yml следующие строчки:
disabled: is_secure: off
Если вы хотите использовать другой модуль, модифицируйте apps/frontend/config/settings.yml:
all:
all:
.actions:
module_disabled_module: foo # To be called when a user requests
module_disabled_action: bar # A module disabled in the module.ymlИ очистите кэш
php symfony cc
Страница “Website Temporarily Unavailable”
Вебсайт может отображаться как “недоступный” если:
- приложение отключено через таск
php symfony project:disable - В процессе очистки кэша, если опция check_lock включена в settings.yml.
В этих случаях symfony ищет файл unavailable.php и вы можете разместить его в следующих местах:
- В
mySfProject/apps/frontend/config/unavailable.php(имеет смысл, если у вас будут разные версии для разных приложений) - В
mySfProject/config/unavailable.php
Если хотите, вы можете взять оригинальный файл и модифицировать его.
Не забывайте очистить кэш.
Чтобы протестировать эту страницу, нужно отключить фронтэнд и dev окружении:
php symfony project:disable frontend dev

2 Comments
Круто, но стоит незабывать что если в качестве login/logout модулей используется sfGuardAuth, то править actions.class.php надо для модуля, а не для default )
Точно ;) Вообще говоря сложно придумать ситуацию когда guard не нужен.