Documentation / Flash Messages / Utilisation dans les handlers
Utilisation dans les handlers
Pattern avec redirection (messages flash)
pub async fn sign_up(mut request: Request) -> AppResult<Response> {
let form: SignupForm = request.form("signup");
let validated = match ValidationForm::try_form(form, &request).await {
Ok(validated) => validated,
Err(form) => {
// ❌ Validation échouée → message immédiat (pas de redirect)
context_update!(request => {
"title" => "Erreur de validation",
"signup_form" => &form,
"messages" => flash_now!(error => "Veuillez corriger les erreurs"),
});
return request.render("signup.html");
}
};
// ✅ Message flash → affiché après le redirect. `save` rend le formulaire.
match validated.save(&request.engine.db).await {
Ok(_) => {
success!(request.notices => "Bienvenue, votre compte est créé !");
Ok(Redirect::to("/").into_response())
}
Err(form) => {
context_update!(request => {
"title" => "Erreur de validation",
"signup_form" => &form,
"messages" => flash_now!(error => "Veuillez corriger les erreurs"),
});
request.render("signup.html")
}
}
}
Plusieurs types de messages
pub async fn about(mut request: Request) -> AppResult<Response> {
success!(request.notices => "Ceci est un message de succès.");
info!(request.notices => "Ceci est un message d'information.");
warning!(request.notices => "Ceci est un message d'avertissement.");
error!(request.notices => "Ceci est un message d'erreur.");
context_update!(request => {
"title" => "À propos",
});
request.render("about.html")
}
Comportement flash (une seule lecture)
Les messages flash stockés en session sont consommés automatiquement lors de l'affichage :
1. POST /signup
→ success!("Bienvenue !")
→ Redirect::to("/")
2. GET /
→ Les messages sont lus depuis la session
→ Affichés dans le template
→ Supprimés de la session
3. GET / (reload)
→ Plus de messages (déjà consommés)