Comment utiliser les messages flash sous Symfony?
Généralement, on préférera utiliser un petit peu de javascript pour afficher une confirmation à l’utilisateur mais lorsque l’action se fait durant un changement de page ou en asynchrone, le javascript ne nous est d’aucune utilité… Heureusement, symfony dispose de messages flash parfait pour ce genre de cas.
C’est quoi un message flash?
On peut s’imaginer une boîte aux lettres dans laquelle vos messages arrivent. Ces messages n’ont pas une adresse mais un label. Par exemple, “succes” pour vos messages de confirmation, “error” pour les problèmes,...
Ils resteront dans cette boîte jusqu'à ce que vous les récupériez, en précisant le label ciblé, directement dans Twig.
Attention qu’une fois récupéré, ils disparaîtront !
Créer un message flash dans le controller
Vous allez voir, il n’y a rien de plus simple:
#[Route('/user/new')]
public function userNew(): Response
{
$this->addFlash('success', 'User created !');
return $this->render('user.html.twig');
}
Je vous rappelle que ce n’est pas parce que vous le créez dans une action précise que le message devra être affiché dans la réponse de cette dernière. Ici, le message est simplement ajouté dans une liste.
Afficher les messages dans TWIG
Pour vider cette liste, il suffit de placer cette boucle dans votre template TWIG:
{% for success in app.flashes('success') %}
{{ success }}
{% endfor %}
Et si vous placez ce code sur deux pages?
Et bien la première chargée affichera les messages.
La seconde elle ne récupérera qu’une liste vide.