Кастомизация плагина sfDoctrineGuardPlugin

Делаю проект на Symfony 1.4 с публичной частью и системой управления. Чтобы не изобретать велосипед, в качестве учетной системы пользователей решил использовать sfDoctrineGuardPlugin — плагин существует давно, и является весьма мощным в функциональном плане.

Описание установки и последующей кастомизации смотрите под катом.


Инструкция по установке, приведенная на сайте, содержит небольшую опечатку. Вот здесь:

svn co http//svn.symfony-project.com/plugins/sfDoctrineGuardPlugin/trunk plugins/sfDoctrineGuardPlugin

Пропущено двоеточие после http. Надо исправить:

svn co http://svn.symfony-project.com/plugins/sfDoctrineGuardPlugin/trunk plugins/sfDoctrineGuardPlugin

В остальном, если все проделать по пунктам, плагин встанет без проблем.

Далее.

Если после установки плагина вы попытаетесь открыть страницу со списком зарегистрированных пользователей, то получите сообщение об ошибке. Вам скажут, что какая-то форма не определена. Для корректного завершения установки нужно выполнить еще две команды:

symfony doctrine:build-filters

и

symfony doctrine:build-forms

Одной из типовых задач кастомизации является смена layout’а у формы авторизации (модуль sfGuardAuth, страница singin) на другой, отличный от стандартного. Например, в вашем проекте навигации по системе управления может в принципе не потребоваться. Еще одна возможная причина такого решения: единообразие.  Часто формы для ввода логина и пароля кардинально отличаются по внешнему виду и по внутренней кухне от всех остальных страниц системы управления.

В документации сказано, что для этого нужно создать у себя в приложении одноименную папку с action-классом sfGuardAuthActions, который пронаследован от BasesfGuardAuthActions. После чего вы должны получить возможность менять любые настройки через переопределенные же YAML-файлы модуля. Увы, это не так.

Я предлагаю не патчить плагин, а просто добавить в класс sfGuardAuthActions метод preExecute. Вот такой:


public function preExecute()
{
  $layout = $this->getActionName()
    == sfConfig::get('sf_login_action')
    ? 'sfGuardLayout'
    : $this->getLayout();
  $this->setLayout($layout);
}

После чего, в шаблоне sfGuardLayout я удалил всю навигацию, в моем случае она была не нужна.

Все.

Можно еще sfGuardLayout переименовать во что-то более подходящее, например в sfGuardAuthLayout. Хотя и так пойдет. :)

This entry was posted in CMF, Программирование and tagged , , , . Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

*


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>