Мне нужно направить модификацию $ sf_content, что является лучшим способом?

Ситуация: по умолчанию доступна только основная страница, всем остальным страницам нужен зарегистрированный пользователь. Когда модуль загружается без пользователя, должен отображаться шаблон входа в систему, а не модуль. Другими словами, $sf_content должен быть опустошен в layout.php который не является на 100% нормально, поскольку в макете есть логика. Есть ли для этого элегантный способ? Я не думаю, что помощник в порядке …

Related of "Мне нужно направить модификацию $ sf_content, что является лучшим способом?"

Проверьте фильтры безопасности, это один стандартный способ безопасности, разработанный в Symfony. Вы даже можете реализовать свой собственный класс SecurityFilter с требуемой функциональностью.

http://symfony.com/legacy/doc/reference/1_4/en/12-Filters#chapter_12_security

Это делается по умолчанию для фильтра sfBasicSecurityFilter . Вам просто нужна хорошая конфигурация. Прочтите эту часть учебника Jobeet. Для аутентификации пользователя вы должны использовать sfDoctrineGuardPlugin (или sfGuardPlugin если используете Propell).

Чтобы завершить мои комментарии выше: Существуют различные способы переопределения макета. Вы можете использовать методы:

  setLayout($name) //or using foward, which forwards current action to a new one (without browser redirection) forward($module, $action); 

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

 class yourFilter extends sfFilter { public function execute($filterChain) { if($yourConditionForOverrideTheDefaultLayout) { //here the syntax to change the layout from the filer $actionStack = $this->getContext()->getActionStack(); $actionStack->getFirstEntry()->getActionInstance()->setLayout('yourLayout'); } $filterChain->execute(); } } 

Чтобы избежать ненужного дублирования в файле макета, вы можете работать с фрагментами и частицами.