Flash Messages

Macros flash

Macros de redirection

Ces macros stockent les messages en session via request.notices. Ils s'affichent après la prochaine redirection (pattern Post/Redirect/Get).

success!

success!(request.notices => "Utilisateur créé avec succès !");
success!(request.notices => format!("Bienvenue {} !", username));

// Plusieurs messages en une fois
success!(request.notices => "Créé", "Email envoyé", "Bienvenue !");

error!

error!(request.notices => "Une erreur s'est produite");
error!(request.notices => format!("Erreur : {}", e));

info!

info!(request.notices => "Veuillez vérifier votre email");

warning!

warning!(request.notices => "Cette action ne peut pas être annulée");

Chaque macro appelle .success(), .error(), .info() ou .warning() sur request.notices (de type Message).


Macro flash_now! — Messages immédiats

flash_now! crée un Vec<FlashMessage> pour affichage immédiat dans la requête courante. Idéal pour les cas où il n'y a pas de redirection (par exemple, ré-affichage du formulaire après une erreur de validation).

// Un seul message
let msgs = flash_now!(error => "Veuillez corriger les erreurs");

// Plusieurs messages
let msgs = flash_now!(warning => "Champ A incorrect", "Champ B manquant");

Types disponibles

TypeClasse CSS générée
successmessage-success
errormessage-error
infomessage-info
warningmessage-warning

Injection dans le contexte

flash_now! retourne un vecteur à injecter manuellement dans le contexte :

context_update!(request => {
    "title" => "Erreur de validation",
    "form" => &form,
    "messages" => flash_now!(error => "Veuillez corriger les erreurs"),
});

Différence flash vs flash_now

success! / error! / etc.flash_now!
StockageSessionMémoire (Vec)
AffichageAprès redirectRequête courante
Durée de vieJusqu'à la prochaine lectureRequête unique
Usage typiquePost/Redirect/GetRé-affichage formulaire
Injection contexteAutomatiqueManuelle ("messages" => flash_now!(...))

Quand utiliser quoi ?

Utilisez les macros flash (session)

// Après une action réussie avec redirection
success!(request.notices => "Sauvegardé !");
return Ok(Redirect::to("/").into_response());

Utilisez flash_now! (immédiat)

// Erreur de validation → ré-afficher la page sans redirect
context_update!(request => {
    "form" => &form,
    "messages" => flash_now!(error => "Formulaire invalide"),
});
return request.render("form.html");