10

我想在我们的页面上添加对 Flash 消息的支持。我按照此处找到的文档实现了这一点。

我将以下代码片段添加到我的基本布局中。(我也尝试将其添加到特定的操作模板中)。

{% 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”

还有什么我需要做的吗?

4

7 回答 7

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 %}
于 2012-07-31T08:01:30.867 回答
6

嗯,检查你的配置文件,你已经自动启动了会话:

session:
    default_locale: %locale%
    auto_start:     true

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

于 2011-11-23T17:06:10.277 回答
3

这在撰写本文时已经很老了,所以想象一下你现在已经解决了,但为了参考,它has不是hasFlash. 所以..

{% if app.session.flashbag.has('notice') %} 
    <div id="flashmessage" class="flash-notice"> 
       {{ app.session.flashbag.get('notice') }} 
   </div> 
{% endif %} 
于 2015-03-20T22:22:41.873 回答
3

通过 symfony 2.6 +

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

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

于 2015-09-05T19:25:14.687 回答
1

在控制器中

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

在你的树枝文件中

{% for flashMessage in app.session.flashbag.get('notice') %}
    <div class="alert alert-warning">{{ flashMessage }}</div>
{% endfor %}  
于 2014-11-27T23:31:24.303 回答
0

intercept_redirects我只是发现如果在调试模式下为真,则闪存消息不起作用。

于 2012-05-17T17:00:44.993 回答
-1

您是否在操作中的某个位置设置了 Flash 消息?

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

请记住,闪存消息将存储在用户会话中,仅用于一个额外的请求。

于 2011-11-23T16:32:38.027 回答