Symfony2中的Flash消息似乎不适用于我的twig-template

时间:2011-11-23 09:49:26

标签: templates symfony twig flash-message

我想在我们的网页上添加对Flash消息的支持。我实施了 这可以通过以下文档找到here

我将以下snipplet添加到我的基本布局中。 (我也尝试添加 它到特定的行动模板)。

{% if app.session.hasFlash('notice') %} 
    <div id="flashmessage" class="flash-notice"> 
       {{ app.session.flash('notice') }} 
   </div> 
{% endif %} 

添加以下错误后抛出

  

Twig_Error_Runtime:第66行“MyBundle :: layout.html.twig”中不存在“”的“hasFlash”项目

还有什么我需要做的吗?

7 个答案:

答案 0 :(得分:18)

你使用symfony 2.0或2.1 (目前是主分支)

对于symfony 2.1,文档位于:http://symfony.com/doc/2.1/book/controller.html#flash-messages

flash消息显示如下:

{% for flashMessage in app.session.flashbag.get('notice') %}
    <div class="flash-notice">
        {{ flashMessage }}
    </div>
{% endfor %}

答案 1 :(得分:6)

在您的配置文件中检查您已自动启动会话:

session:
    default_locale: %locale%
    auto_start:     true

因为错误似乎是Twig找不到会话类,而不是关于hasFlash函数的错误。事实上,我的布局中的代码几乎完全相同。

答案 2 :(得分:3)

这在写作时已经很久了,所以想象你现在已经解决了这个问题,但为了参考起见,它是has而不是hasFlash。所以..

{% if app.session.flashbag.has('notice') %} 
    <div id="flashmessage" class="flash-notice"> 
       {{ app.session.flashbag.get('notice') }} 
   </div> 
{% endif %} 

答案 3 :(得分:3)

通过symfony 2.6 +

{% if app.session.flashbag.has('notice') %}
    {{ app.session.flashbag.get('notice').0 }}<br/>
{% endif %}

因为flashbag是通过这个版本的数组,你需要foreach它或使用索引。我使用索引因为我不需要更多东西。

答案 4 :(得分:1)

在控制器中

$this->get('session')->getFlashBag()->add('notice', 'Your message!');

在你的Twig文件中

{% for flashMessage in app.session.flashbag.get('notice') %}
    <div class="alert alert-warning">{{ flashMessage }}</div>
{% endfor %}  

答案 5 :(得分:0)

我只是发现如果调试模式中intercept_redirects为真,则flash消息不起作用。

答案 6 :(得分:-1)

您是否在动作中的某处设置了闪光信息?

$this->get('session')->setFlash('notice', 'Your changes were saved!');

请记住,Flash消息将存储在用户的会话中,以确定一个附加请求。