2009-05-29 36 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

相关问题