По мотивам 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
Круто, но стоит незабывать что если в качестве login/logout модулей используется sfGuardAuth, то править actions.class.php надо для модуля, а не для default )
Точно 😉 Вообще говоря сложно придумать ситуацию когда guard не нужен.