Symfony - 设置Flash并检查TWIG

Jon*_*Jon 14 symfony twig

我正在尝试在我的控制器中设置Flash,然后检查TWIG是否已设置Flash.我的问题是TWIG总是报告我的Flash没有设置,我不确定为什么.

控制器:

$session->getFlashBag()->add('error', 'Does Not Exist');
Run Code Online (Sandbox Code Playgroud)

枝条:

{{ dump( app.session.hasFlash('error') ) }} //outputs false
{{ dump( app.session.getFlashBag().get('error') ) }} //outputs false
Run Code Online (Sandbox Code Playgroud)

Ven*_*enu 53

在控制器中

$this->get('session')->getFlashBag()->set('error', 'Does Not Exist');

or 

$this->get('session')->getFlashBag()->add('error', 'Does Not Exist');
Run Code Online (Sandbox Code Playgroud)

在Twig

{% for flashMessage in app.session.flashbag.get('error') %}

    {{ flashMessage }}

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

仅供参考:Doc


小智 16

在控制器中:

$this->get('session')->getFlashBag()->add('error', "User does not exists.");
Run Code Online (Sandbox Code Playgroud)

在视图中:

{% for type, messages in app.session.flashbag.all() %}
    {% for message in messages %}
        {% if type == 'error' %}
            {{ message }}
        {% endif %}
        {# Or even with css class rendering:
            <div class="flash-{{type}}">{{message}}</div>
        #}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)


Alb*_*221 8

值得注意的是,在Symfony 3.3及更高版本中我们可以使用简化版本app.flashes().例:

{% for message in app.flashes('notice') %}
    <div class="flash-notice">
        {{ message }}
    </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

资源


sig*_*y85 5

使用 Symfony 5。如果要使用引导类命名显示所有闪存,只需将闪存类型设置为引导类名称(成功/危险/警告...等)

在控制器中设置如下:

$this->addFlash('success', 'Action completed successfully.');
or...
$this->addFlash('danger', 'An error occurred.');
Run Code Online (Sandbox Code Playgroud)

在 Twig 中显示一次,例如在基本模板中 - 像这样(注意简化的 app.flashes 数组变量):

{% for type, messages in app.flashes %}
    {% for message in messages %}
        <div class="alert alert-{{ type }}">{{ message }}</div>
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)