在twig中使用if子句的Symfony2 session-flash无法正常工作

时间:2013-10-30 20:17:21

标签: php symfony twig symfony-2.1

我尝试对设置的会话闪存做出反应,但总是得到else路径

Symfony 2.1.3

控制器:

$this->get('session')->getFlashBag()->set('contactActionNoticeError', 'Message not sent');

查看(尝试“旧”和新风格)但我得到 bla2

{% if app.session.flashbag.has("contactActionNoticeError") or app.session.hasFlash("contactActionNoticeError") %}
    bla1
{% else %}
    bla2
{% endif %}

显示所有闪光时:

{% for label, flashes in app.session.flashbag.all %}
    {% for flash in flashes %}
        {{ label }} - {{ flash }}
    {% endfor %}
{% endfor %}

我明白了:

contactActionNoticeError - Message not sent

3 个答案:

答案 0 :(得分:3)

获取flashbag内容,然后查看它是否为空:

{% set contactActionNoticeError = app.session.flashbag.get("contactActionNoticeError") %}

{% if (contactActionNoticeError is not empty) %}
    bla1
{% else %}
    bla2
{% endif %}

您仍然可以显示错误(代码取自documentation):

{% for flashMessage in contactActionNoticeError %}
    <div>
        {{ flashMessage }}
    </div>
{% endfor %}

答案 1 :(得分:2)

我知道一个老问题但是,我想补充一个答案,因为有更好的办法。如上所述,默认行为是一旦访问就取消设置flashbag(如果想先检查则不太方便)

// Instead of 
{% if app.session.flashBag.get('success') is not empty %}
// Use this instead
{% if app.session.flashBag.peek('success') is not empty %}

此信息的来源:Github FlashBag

答案 2 :(得分:0)

这是一个长篇大论,但你可能正在使用FOSUserBundle

几个月前我遇到过类似的问题,其中FOSUserBundle将每条Flash消息拉出会话,只是为了在登录页面显示它们。

此外,由于您提到您正在使用2.1.3,因此会话管理与2.0.x略有不同:

http://symfony.com/doc/master/components/http_foundation/sessions.html