我想在我们的网页上添加对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”项目
还有什么我需要做的吗?
答案 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消息将存储在用户的会话中,以确定一个附加请求。