2013-02-18 4 views
0

Давайте предположим, что этот фильтр:Как передать данные из фильтра в действие?

public function execute ($filterChain) 
{ 
    if ($this->isFirstCall()) 
    { 
     $loggeduser = array(); 
     . 
     . 
     . 
     $this->getContext()->getResponse()->setSlot ('loggeduser', $loggeduser); 
    } 
} 

Я хочу передать этот loggeduser массив к каждому действию, даже АЯКС действия. Эта переменная хранит зарегистрированные данные пользователя. функция get_slot(); не работает. Как это решить? Сессия не должна использоваться в этот раз.

ответ

3

Это должно работать:

$this->getContext()->getRequest()->setParameter('loggeduser', $loggeduser);

+0

Вы также можете сохранить его в сеансе: '$ this-> getContext() -> getUser() -> setAttribute ('loggeduser', $ loggeduser)' – j0k

+0

Он сказал, что «сеанс не должен использоваться в этот раз». –

+0

Woops, хороший момент. – j0k

0

Там нет getSlot() метода на sfWebResponse но есть getSlots() так что вы можете получить массив всех слотов, которые прошли в ответ.

В любом контроллере:

$slots = $this->getResponse()->getSlots(); 
print_r($slots['loggeduser']); 

Как @Vlad Jula-Nedelcu заявил, если вы не хотите использовать сессию и действительно нужно только передать переменную между контроллерами в одном сценарии запуска вы можете установить свойство любого объекта хранится в sfContext.

К сожалению, в Sf 1.4. вы не можете добавить свои собственные объекты в sfContext, вы должны использовать те, которые уже есть.

Смежные вопросы