J'essaie de définir Flash dans mon contrôleur, puis vérifiez dans TWIG si un Flash a été défini. Mon problème est que TWIG rapporte toujours que mon flash n’a pas été réglé et je ne sais pas pourquoi.
Manette:
$session->getFlashBag()->add('error', 'Does Not Exist');
BRINDILLE:
{{ dump( app.session.hasFlash('error') ) }} //outputs false
{{ dump( app.session.getFlashBag().get('error') ) }} //outputs false
Dans le contrôleur
$this->get('session')->getFlashBag()->set('error', 'Does Not Exist');
or
$this->get('session')->getFlashBag()->add('error', 'Does Not Exist');
En brindille
{% for flashMessage in app.session.flashbag.get('error') %}
{{ flashMessage }}
{% endfor %}
FYI: Doc
En contrôleur:
$this->get('session')->getFlashBag()->add('error', "User does not exists.");
En vue :
{% 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 %}
Il est à noter que dans Symfony version 3.3 et ultérieure, nous pouvons utiliser la version simplifiée app.flashes()
. Exemple:
{% for message in app.flashes('notice') %}
<div class="flash-notice">
{{ message }}
</div>
{% endfor %}
c est simplifié dans symfony 4 (cela devrait aussi fonctionner en 3.4)
Votre contrôleur:
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(...);
}
Rameau:
{% for message in app.flashes('notice') %}
<div class="flash-notice">
{{ message }}
</div>
{% endfor %}
Utilisez FlashAlertBundle , il fournit un moyen simplifié de gérer (ajouter/afficher) des messages flash Symfony.
Disponible via
https://github.com/rasanga/FlashAlertBundle
https://packagist.org/packages/ras/flash-alert-bundle
Vous avez juste besoin d'une seule ligne
{{ render_flash_alerts() }}
rendre des messages flash