在动作中,我为用户设置了一些反馈:
$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现在绑定到用户对象的原因。
答案 0 :(得分:2)
尝试使用带有字符串的两个setFlash
(不是数组)。我认为这会奏效。 Symfony在模板中访问数组时转义数组。试试var_dump($sf_user->getFlash('message'));
以确定你得到了什么。
答案 1 :(得分:1)
Symfony中的闪烁用于在页面上显示一次响应,即“闪烁”一条消息。如果刷新页面,则该闪存将不再存在。
因此假设用户提交了一个表单,并且该操作执行了以下代码
$this->getUser()->setFlash( 'message', 'Some message here' );
该视图具有以下内容
# Note: getFlash returns "" if flash is not set
echo $sf_user->getFlash('message');
然后,在提交表单后,该用户对视图的第一个请求,因此设置该闪存将导致getFlash返回“此处的某些消息”并删除/取消设置闪存。因此,来自该用户的任何对同一消息的请求现在都将返回一个空字符串。
这意味着,闪光灯仅持续一个请求。这是在与表单相同的页面上显示表单响应的好方法。