Symfony2 - 如何清除/编辑Flash消息

时间:2013-11-19 13:35:20

标签: php symfony controller twig flash-message

渲染树枝模板时,我在控制器中设置了一条flash消息。 如果有帖子操作,我想重定向到同一页面,但更改Flash消息。

if ($request->isMethod('POST')) {
    ...
    ...

    $this->get('session')->getFlashBag()->clear(); // Does not work
    $this->get('session')->getFlashBag()->all();   // Does not work

    $request->getSession()->getFlashBag()->set('user-notice', $flash_message2);

    return $this->redirect($request->headers->get('referer'));
}


$this->get('session')->getFlashBag()->set('user-notice', $flash_message1);

return $this->render(....

但问题是显示的flash消息是$ flash_message1,应该是$ flash_message2。

当尝试使用add而不是set时,我可以看到它们。 我尝试使用Symfony2 clear()all()函数:http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Session/Flash/FlashBagInterface.html但没有任何改变。

有什么想法吗?谢谢!!!

3 个答案:

答案 0 :(得分:13)

要清除所有Flash消息,请使用以下代码:

$this->get('session')->getFlashBag()->clear();

答案 1 :(得分:12)

使用...

$flashBag = $this->get('session')->getFlashBag();
$flashBag->get('user-notice'); // gets message and clears type
$flashBag->set('user-notice', $flash_message2);

...在isPost()条件之后。

答案 2 :(得分:3)

删除所有 Flash消息的一种简单方法如下:

// clear all messages from FlashBag
$flashBag = $this->get('session')->getFlashBag();
foreach ($flashBag->keys() as $type) {
    $flashBag->set($type, array());
}

这在Symfony 2.4中运行得很好,可能还有所有其他最新版本。