Symfony - настройка Flash и проверка в TWIG

Я пытаюсь установить Flash в свой контроллер, а затем проверить TWIG, если установлена ​​Flash. Моя проблема в том, что TWIG всегда сообщает, что мой Flash не установлен, и я не уверен, почему.

Контроллер:

$session->getFlashBag()->add('error', 'Does Not Exist');

TWIG:

{{ dump( app.session.hasFlash('error') ) }} //outputs false
{{ dump( app.session.getFlashBag().get('error') ) }} //outputs false

Ответ 1

В контроллере

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

or 

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

В Twig

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

    {{ flashMessage }}

{% endfor %}

FYI: Doc

Ответ 2

В контроллере:

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

Ввиду:

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

Ответ 3

Стоит отметить, что в Symfony 3.3 и выше мы можем использовать упрощенную версию app.flashes(). Пример:

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

Источник

Ответ 4

это упрощено в symfony 4 (должно работать и в 3.4 тоже)

Ваш контроллер:

if ($form->isSubmitted() && $form->isValid()) {
    // do some sort of processing

    $this->addFlash(
        'notice',
        'Your changes were saved!'
    );
    // $this->addFlash() is equivalent to $request->getSession()->getFlashBag()->add()

    return $this->redirectToRoute(...);
}

Веточка:

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

Ответ 6

У меня была похожая проблема, и она была не из Symfony или даже PHP, это был браузер Google Chrome, я запускал тот же код в других браузерах, и он работал как ожидалось.