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 %}
Ответ 5
Используйте FlashAlertBundle, он обеспечивает упрощенный способ обработки (добавления/отображения) флеш-сообщений Symfony.
Доступно через
https://github.com/rasanga/FlashAlertBundle
https://packagist.org/packages/ras/flash-alert-bundle
Вам нужна только одна строка
{{ render_flash_alerts() }}
для отображения флэш-сообщений
Ответ 6
У меня была похожая проблема, и она была не из Symfony или даже PHP, это был браузер Google Chrome, я запускал тот же код в других браузерах, и он работал как ожидалось.