Но писать условия в каждом модуле - не красиво.
Поэтому можно сделать это заранее в фильтре.
В файле app/your_module/config/filters.yml добавь ваш фильтр:
rendering: ~
security: ~
# insert your own filters here
change_layuot:
class: changeLayoutFilter
param:
cache: ~
common: ~
execution: ~
Создайте класс changeLayoutFilter и положите его в lib/:
class changeLayoutFilter extends sfFilter
{
public function execute($filterChain)
{
$request = $this->getContext()->getRequest();
$user = $this->getContext()->getUser();
//устанавливаю layuot
if(isNY()){
sfConfig::set('symfony.view.'.
$this->getContext()->getModuleName().'_'.
$this->getContext()->getActionName().'_layout',
'your_layout');
}
// Execute next filter
$filterChain->execute();
}
}
isNY() - это ваше условие, 'your_layout' - ваш layout.
Кстати, почему я не использовал конструкцию по учебнику:
class changeLayoutFilter extends sfFilter
{
public function execute($filterChain)
{
// Execute this filter only once
if ($this->isFirstCall())
{
[... ...]
}
}
}
?
Потому что если будет использован forward в контроллере(sfAction), то
цепочка фильтров будет запущено заново и наш хак не сработает.
Посмотрите сами в дебагере, вкладка "log" как ваш фильтр будет запущен 2 раза.
Комментариев нет:
Отправить комментарий