3

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

    $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 现在绑定到用户对象的原因。

4

2 回答 2

2

setFlash用两个字符串(不是数组)尝试相同的操作。我认为这会奏效。Symfony 在模板中访问数组时会转义数组。试着var_dump($sf_user->getFlash('message'));确定你得到了什么。

于 2011-08-08T14:42:07.507 回答
1

Symfony 中的 Flash 用于在页面上仅显示一次响应,即“闪烁”一条消息。如果页面被刷新,该闪存将不再存在。

所以假设用户提交了一个表单,并且动作执行了以下代码

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

并且视图具有以下内容

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

然后这个用户在提交表单后对视图的第一个请求,因此设置该 flash 将导致 getFlash 返回“ Some message here ”并删除/取消设置 flash。因此,该用户对同一消息的任何请求现在都将返回一个空字符串。

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

于 2009-05-29T16:31:52.150 回答