Personnalisation des messages “flash”

L’interaction avec l’utilisateur d’une application passe très souvent par l’affichage de messages d’erreur, d’avertissement ou de succès. CakePHP offre une gestion très simple de ce mécanisme en stockant des messages “flash” dans la session, grâce à la fonction setFlash() dans un Contrôleur et les affiche avec la fonction flash() dans une Vue. Voyons comment personnaliser cet affichage.

Nous choisissons de définir trois types de message flash : succès, avertissement (erreurs de saisie dans un formulaire, etc.) et erreur (opération interdite, paramètre manquant dans l’url, etc.).

1. Un layout pour chaque type de message

La fonction setFlash() d’un Contrôleur accepte deux paramètres : le message à afficher, et le nom d’un layout pour ce message. Nous commençons par créer les trois layouts dont nous avons besoin :

1.1 Succès

1
2
3
4
5
6
7
// {app}/views/layouts/message_succes.ctp
<div id="message_succes" class="message">
  <div class="message_texte">
    <strong>Opération effectuée</strong><br/>
    <?php e($content_for_layout); ?>
  </div>
</div>

1.2 Avertissement

1
2
3
4
5
6
7
// {app}/views/layouts/message_succes.ctp
<div id="message_avertissement" class="message">
  <div class="message_texte">
    <strong>Avertissement</strong><br/>
    <?php e($content_for_layout); ?>
  </div>
</div>

1.3 Erreur

1
2
3
4
5
6
7
// {app}/views/layouts/message_succes.ctp
<div id="message_erreur" class="message">
  <div class="message_texte">
    <strong>Erreur</strong><br/>
    <?php e($content_for_layout); ?>
  </div>
</div>

2. Définition des messages dans les Contrôleurs

Depuis un Contrôleur quelconque, nous pouvons désormais appeler la fonction setFlash() de la façon suivante :

1
2
3
4
5
6
7
8
// Succès
$this->Session->setFlash('Enregistrement mis à jour.', 'message_succes');
 
// Avertissement
$this->Session->setFlash('Corrigez les erreurs de saisie.', 'message_avertissement');
 
// Erreur
$this->Session->setFlash('Paramètre(s) manquant(s) dans l\'URL', 'message_erreur');

3. Affichage des messages

Il ne nous reste qu’à définir où afficher nos messages flash. Nous pouvons choisir un emplacement spécifique à chaque vue, ou plus simplement définir cet emplacement directement dans le layout général du site :

1
2
// {app}/views/layouts/default.ctp
$session->flash();

4. Exemples

Message de succès

Message d’avertissement

Message d’erreur

Pierre-Emmanuel Fringant

Commentaires

Pour info, il y a un petit helper dans la Bakery qui permet de générer plusieurs flash d’affilée, et de personnaliser leur affichage.

C’est très simple et pratique pour apprendre à faire un helper.

http://bakery.cakephp.org/articles/view/multiple-flashes-with-different-classes

Jerome

C’est effectivement un bon point de départ pour apprendre à créer ses propres Helpers, mais celui-ci n’apporte pas grand chose (comme Nate le soulève dans le 8ème commentaire) :

- la personnalisation du message est assurée par le deuxième paramètre de la méthode setFlash() comme décrit dans ce tutorial ;

- la possibilité d’afficher plus d’un message est inutile dans la plupart des cas. En effet, si l’on doit afficher un diagnostic, soit tout s’est bien déroulé, soit il y a une erreur, mais quel intérêt d’afficher un message de succès pour quelque chose, puis un message d’erreur pour autre chose juste en dessous ? Ce qui va concerner l’utilisateur, c’est qu’il y a eu une erreur, même si d’autres choses se sont bien passées.

Participez