在symfony 4.1中
在控制器中:
$this->addFlash(
'notice',
'Your changes were saved!'
);
return $this->render(...);
Twig基本模板:
{% for message in app.flashes('notice') %}
<div class="flash-notice">
{{ message }}
</div>
{% endfor %}
这很好,但是我想将所有消息包装在div中。以下内容不起作用:
{% if app.flashes is not empty %}
<div id="messageBox" class="overlay">
<div class="message" onclick="slide(document.querySelector('#messageBox')); this.classList.add('fadeAway');">
{% for label, messages in app.flashes %}
<section class="{{ label }}">
<p><b>{{ label }}</b></p>
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
</section>
{% endfor %}
</div>
</div>
{% endif %}
问题在于{% if app.flashes is not empty %}
行删除了消息,因此以下for循环和空结果。
如何将peekAll()
用于if
逻辑?
答案 0 :(得分:0)
我不知道这是否是最好的方法,但是以下是我的解决方法。
在base.html.twig中:
{% set flashes = app.flashes %}
{% if flashes is not empty %}
<div id="messageBox" class="overlay">
<div class="message" onclick="slide(document.querySelector('#messageBox')); this.classList.add('fadeAway');">
{% for label, messages in flashes %}
<section class="{{ label }}">
<p><b>{{ label }}</b></p>
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
</section>
{% endfor %}
</div>
</div>
{% endif %}
基本上,将返回值app.flashes
设置为flashes
并进行处理。
答案 1 :(得分:0)
使用peekAll()
进行检查的正确方法是{% if app.session.flashbag.peekAll() is not empty %}
,这不会按照文档清除FlashBag。