2011-09-16 73 views
0

我在Symfony中有一個應用程序,它會生成許多消息。模塊中的每個動作都可以生成一個存儲在數組中的消息。最後添加的消息應該顯示在任何視圖中(所以我在layout.php中調用該函數,以便在每個視圖模板中顯示消息)。許多操作重定向(通過redirect()函數;在設置消息後,我不會使用forward())執行另一個操作。重定向時記住數據

所以該方案是關注。 - 操作A:設置消息,重定向到操作B. - 操作B:顯示視圖(以及課程佈局)。

當我不使用重定向(),一切工作正常。但是,當我設置消息(my_array [] = 「新郵件」 $),陣列似乎 「管芯」(空)剛過重定向( 'same_module/another_action')

的問題是:

如何設置一個動作數據(變量),這將是「無障礙」的另一動作發生重定向後(重定向())。我注意到,當我使用forward()時,變量是可訪問的,但是當我使用redirect()時,所有變量似乎都是空的。

我甚至產生my_class,並把它們的功能來處理(添加,顯示)在lib目錄的消息,以爲至少outern文件會記得我的消息(數組)。但實際上沒有任何改變 - 重定向後數組似乎再次變爲空(redirect()後的count($ messages_array)= 0)。

對我來說真的很奇怪。任何解決方案?

回答

0

它與進步,但不是重定向的原因是因爲重定向請求的瀏覽器進入到一個新的URL(使一個新的HTTP請求),但前確實在內部(在symfony中)。

如果你只需要一次,我建議symfony中的MYUSER類,它獲取下次請求之後清除了閃光燈功能,以顯示這些消息。在動作設爲:

$this->getUser()->setFlash("message", "blahlahblah"); 

然後在你的模板,你可以調用$sf_user->hasFlash("message")看用戶是否有特定類型的閃光燈(在本例中:消息),然後通過$sf_user->getFlash("message")得到它。較長的例子:

<?php if ($sf_user->hasFlash("message")): ?> 
    <div class="message"> 
    <?php echo $sf_user->getFlash("message) ?> 
    </div> 
<?php endif ?> 

有關flash作品如何看待docs的詳細信息。