Contributed by
Javier Eguiluz
in #21819.
Flash messages (消息条子)是指存在session中的“在你获取之后自行消失”的信息。它们常被用于对用户显示通知。在模板中以这种方式使用消息条子略显烦琐,因此我们决定在Symfony 3.3中简化它。
首先,得益于全新的 app.flashes
helper,你毋须再深入到session对象中或操作 "flash bags" 来获取条子中的信息:
再来,你可以过滤条子信息,只获取属于一或多个类型的信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | {# pass a string argument to get only the messages of that type #}
{# 传入一个字符串参数以便只获取该类型的信息 #}
{% for message in app.flashes('notice') %}
<div class="alert alert-notice">
{{ message }}
</div>
{% endfor %}
{# pass an array argument to get the messages of those types #}
{# 传入一个数组参数以便只获取(数组中的)那些类型的信息 #}
{% for label, messages in app.flashes(['warning', 'error']) %}
{% for message in messages %}
<div class="alert alert-{{ label }}">
{{ message }}
</div>
{% endfor %}
{% endfor %} |
最后,全新的模板助手修复了一个关于flash messages的最令人沮丧的问题:检查消息条子是否存在时会自动启动session。这也是为何你不得不首先要检查session是否存在。这种检查现在已经在内部完成,因此你不必再关注它,而session永不再自动启动了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | {# before / 之前 #}
{% if app.session is not null and app.session.started %}
{% for label, messages in app.session.flashbag.all %}
{% for message in messages %}
...
{% endfor %}
{% endfor %}
{% endif %}
{# after / 之后 #}
{% for label, messages in app.flashes %}
{% for message in messages %}
...
{% endfor %}
{% endfor %} |