2009-05-29 64 views
3

在一個動作,我設置爲用戶的一些反饋:我是否以錯誤的方式使用Symfony Flash變量?

$this->getUser()->setFlash('message', array(
    "type" => "notice", 
    "content" => "Well done buddy, you did it." 
    )); 

    $this->redirect('home/index'); 

在視圖中,我只是使用下面的代碼:

<?php if ($sf_user->hasFlash('message')): $message = $sf_user->getFlash('message') ?> 
    <p class="<?php echo $message["type"] ?>" ><?php echo $message["content"]?></p> 
<?php endif; ?> 

,但似乎從來沒有消息。

不是說問題不是'它出現一次然後它消失'的原因,這將意味着它的作品。問題是它永遠不會出現。不止一次。

我正在使用Symfony 1.2,這就是爲什麼flash var現在綁定到用戶對象。

回答

2

嘗試使用字符串(不是數組)的兩個setFlash相同。我認爲這會起作用。當在模板中訪問數組時,Symfony正在轉義數組。嘗試var_dump($sf_user->getFlash('message'));以確保你得到。

1

Symfony中的閃爍用於在頁面上顯示一次響應,即「閃爍」消息。如果頁面刷新,該閃光燈將不再存在。

因此,假設用戶提交一個表單,並且動作執行以下代碼

$this->getUser()->setFlash('message', 'Some message here'); 

和View具有以下

# Note: getFlash returns "" if flash is not set 
echo $sf_user->getFlash('message'); 

然後接收該用戶的非常第一次請求的視圖提交表單後,因此設置該閃存會導致getFlash返回「某些消息」並刪除/取消閃存設置。因此,來自該用戶的相同消息的任何請求現在都會返回一個空字符串。

這是什麼意思,閃光燈持續只有一個請求。這是在表單的同一頁面上顯示錶單回覆的好方法。

+0

我知道flash是ephemerial變量。我並不是說它只工作一次,然後我重新加載了網頁,但它不起作用。我的意思是它按照預期的方式運行了一次,然後整個mecanisme都不再工作了。也許我改變了一些東西,但我不喜歡它。 – 2009-05-29 17:26:32

相關問題