4

I try to react on a setted session-flash but get always the else-path

Symfony 2.1.3

Controller:

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

View (tried "old" and new style) But I get bla2

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

when showing all flashes with this:

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

I get this:

contactActionNoticeError - Message not sent
4

3 回答 3

3

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

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

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

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

{% for flashMessage in contactActionNoticeError %}
    <div>
        {{ flashMessage }}
    </div>
{% endfor %}
于 2013-10-31T02:55:52.743 回答
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

于 2016-12-01T09:24:29.723 回答
0

这充其量只是一个长镜头,但您可能正在使用FOSUserBundle吗?

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

此外,由于您提到您正在使用2.1.3,会话管理的完成方式与2.0.x

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

于 2013-10-30T20:57:51.100 回答