2013-02-18 48 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

你也可以將它存儲在session中:'$ this-> getContext() - > getUser() - > setAttribute('loggeduser',$ loggeduser)' – j0k 2013-02-19 08:42:27

+0

他說:「這次不能使用會話。 – 2013-02-19 09:20:48

+0

Woops,好點。 – j0k 2013-02-19 09:38:12

0

上有sfWebResponse沒有getSlot()方法,但有getSlots(),所以你可以檢索你已經傳遞到響應的所有插槽的數組。

在任何控制器:

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

由於@Vlad Jula-Nedelcu說,如果你不想使用會話和真的只需要通過控制器之間的變量在運行,你可以在任何對象上設置屬性一個腳本保存在sfContext中。

不幸的是在1.4中。你無法將自己的對象添加到sfContext中,你必須使用那些已經存在的對象。

相關問題