【问题标题】:Symfony2 session-flash with if clause in twig isn't workingtwig 中带有 if 子句的 Symfony2 session-flash 不起作用
【发布时间】:2013-10-30 20:17:21
【问题描述】:

我尝试对设置的 session-flash 做出反应,但总是得到 else-path

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

【问题讨论】:

    标签: php symfony twig symfony-2.1


    【解决方案1】:

    获取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 %}
    

    【讨论】:

    • 我编辑了您对set contactActionNoticeError 的回答。所以这行得通。但是仍然存在为什么.has.hasFlash 不起作用的问题
    • flashbag is empty once you accessed it。您只访问一次闪存包吗?
    • 我稍后会访问 flashbag,但您如何看到我能够多次访问 flashbar。我更改了我的代码以在开始时读出 flashbags,所以它可以工作
    【解决方案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

    【讨论】:

      【解决方案3】:

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

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

      此外,由于您提到您使用的是2.1.3,会话管理的完成方式与2.0.x 略有不同:

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

      【讨论】:

      • 不,我没有使用 FOSUserBundle。我怎么说:通过app.session.flashbag.all 反复闪烁,我可以看到我的消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2015-11-07
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      相关资源
      最近更新 更多