in Профессиональное

Чеклист: готов ли ваш symfony проект к развертыванию (часть 1)

По мотивам 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 и у вас есть выбор, где его разместить:

  1. В mySfProject/apps/frontend/config/error/error.html.php. Имеет смысл в случае, когда у вас планируется отдельная версия для каждого приложения (app).
  2. В 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.

Если хотите, можете взять оригинальный файл и модифицировать его.

Для того, чтобы протестировать эту страницу нужно:

  1. Перейти в продуктовое окружение
  2. Разлогиниться (используйте линк logout или же, если у вас его нет, удалите все куки для домена с вашим приложением (в firefox можете воспользоваться плагином web developer)).
  3. Откройте защищенную страницу.

Используем отдельный модуль. Для этого модифицируем 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. Если хотите, можете взять оригинальный файл и модифицировать его.

Теперь нужно протестировать экшен. Для этого нужно:

  1. Перейти в продуктовое окружение
  2. Войти в систему, но не как super admin
  3. Для одного из модулей добавить в apps/frontend/modules/yourModule/config/security.yml:
  4. all:
      credentials: [ aCredentialYouDontHave ]
    
  5. Очистить кэш
  6. Открыть любое из действий данного модуля

Если вы хотите использовать другой модуль, модифицируйте 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. Если хотите, можете взять оригинальный файл и модифицировать его.

Теперь нужно протестировать отключенный модуль. Для этого нужно:

  1. Перейти в продуктовое окружение
  2. Для одного из модулей добавить в apps/frontend/modules/yourModule/config/module.yml:
  3. all:
      enabled: false
    
  4. Очистить кэш
  5. Открыть любое из действий данного модуля

Если 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 и вы можете разместить его в следующих местах:

  1. В mySfProject/apps/frontend/config/unavailable.php (имеет смысл, если у вас будут разные версии для разных приложений)
  2. В mySfProject/config/unavailable.php

Если хотите, вы можете взять оригинальный файл и модифицировать его.

Не забывайте очистить кэш.

Чтобы протестировать эту страницу, нужно отключить фронтэнд и dev окружении:

php symfony project:disable frontend dev

Write a Comment

Comment

*

  1. Круто, но стоит незабывать что если в качестве login/logout модулей используется sfGuardAuth, то править actions.class.php надо для модуля, а не для default )

    • Точно 😉 Вообще говоря сложно придумать ситуацию когда guard не нужен.