我是否以错误的方式使用Symfony flash变量?

时间:2009-05-29 16:03:21

标签: php symfony1

在动作中,我为用户设置了一些反馈:

    $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 个答案:

答案 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返回“此处的某些消息”并删除/取消设置闪存。因此,来自该用户的任何对同一消息的请求现在都将返回一个空字符串。

这意味着,闪光灯仅持续一个请求。这是在与表单相同的页面上显示表单响应的好方法。