web-dev-qa-db-fra.com

Comment définir un message flash dans Yii2?

j'ai suivi ceci Link . Mon code est le suivant.

public function actionFunction4()
    {
        $this->layout="sintel";
        $model= new Customers();
        \Yii::$app->getSession()->setFlash('success', 'successfully got on to the payment page');
        return $this->render("function4",['model'=>$model]);
    }

dans la vue

 <div id="message">

          <?= Yii::$app->session->getFlash('success');?>
      </div>

maintenant, le résultat de ce que j'ai fait n'est pas ce à quoi je m'attendais. J'ai reçu un message "avec succès sur la page de paiement" comme je l'ai fait écho. Si cela ressemble à echo, alors pourquoi avons-nous besoin d’un message flash en Yii2? Je pense que quelque chose manque dans mon code pour que mon message flash apparaisse comme un message ordinaire. 

14
Bloodhound

Réglage du message flash

Un message flash est utilisé pour conserver un message en session via une ou plusieurs demandes du même utilisateur. Par défaut, il est retiré de la session après son affichage à l'utilisateur. 

Les messages flash peuvent être définis à l'aide de setFlash () Method

Ajoutez le code ci-dessous dans votre fichier controller comme:

Yii::$app->session->setFlash('success', "Your message to display.");

Exemple:

class ProductsController extends \yii\web\Controller
{
    public function actionCreate()
    {
         $model = new User();

         if ($model->load(Yii::$app->request->post())) {
              if ($model->save()) {
                  Yii::$app->session->setFlash('success', "User created successfully."); 
              } else {
                  Yii::$app->session->setFlash('error', "User not saved.");
              }
              return $this->redirect(['index']);
         }
         return $this->render('create', [
             'model' => $model
         ]);
    }
}

Affichage d'un message flash

Pour vérifier les messages flash, nous utilisons la méthode hasFlash () et nous obtenons le message flash avec la méthode getFlash ()

Par défaut, l'extraction d'un message le supprime de la session. Cela signifie qu'un message est censé être affiché uniquement sur la première page servie à l'utilisateur. Les méthodes de récupération ont un paramètre booléen qui peut modifier ce comportement.

Ainsi, l'affichage du message flash défini ci-dessus dans une view est fait par

// display success message
<?php if (Yii::$app->session->hasFlash('success')): ?>
    <div class="alert alert-success alert-dismissable">
         <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
         <h4><i class="icon fa fa-check"></i>Saved!</h4>
         <?= Yii::$app->session->getFlash('success') ?>
    </div>
<?php endif; ?>

// display error message
<?php if (Yii::$app->session->hasFlash('error')): ?>
    <div class="alert alert-danger alert-dismissable">
         <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
         <h4><i class="icon fa fa-check"></i>Saved!</h4>
         <?= Yii::$app->session->getFlash('error') ?>
    </div>
<?php endif; ?>
32
vishuB

L'avantage du message flash est qu'il ne s'affiche qu'une seule fois. Vous n'avez plus besoin de fournir la logique if/else. Et si vous mettez le code pour afficher le message flash dans le fichier de présentation (souvent view/layout/main.php), vous pouvez définir le message flash dans chaque action où il est nécessaire, utilisez des réponses normales ou des redirections et vous pouvez être sûr qu'il ne soit affiché qu'une seule fois. Cela rend la vie un peu plus facile. C’est l’idée des messages flash - pas qu’ils disparaissent après un certain temps.

Voir la section sur les messages flash dans le guide .

3
robsch

Moins de code. Si vous ne voulez pas si d'autres conditions suivent

 Yii::$app->session->setFlash('msg', '
     <div class="alert alert-success alert-dismissable">
     <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
     <strong>Validation error! </strong> Your message goes here.</div>'
  );

Et à vos yeux

 <?= Yii::$app->session->getFlash('msg') ?>
1
Dharmendra Singh

Je sais que c’est vieux, mais c’est le premier résultat de la recherche google, je vais donc le mettre à jour . La configuration est toujours la même chose dans yii2, il suffit de l’ajouter dans votre contrôleur.

Yii::$app->session->setFlash('danger', 'you message');

le premier argument de setFlash pourrait être l’un des suivants:

error,danger,success,info,warning

qui déterminera la couleur de style du message flash.

Maintenant pour la partie affichage, tout ce que vous avez à faire est de placer ceci dans votre fichier de layout: 

<?= common\widgets\Alert::widget() ?>

si vous ne disposez pas d'un fichier de mise en page, ajoutez-le dans la vue dans laquelle vous souhaitez afficher un message falsh.

J'espère que cette réponse aide les autres.

1
Anas Dawood

Ci-dessous la classe de contrôleur pour l'ajout de produits

class ProductsController extends \yii\web\Controller
{
    public function actionCreate()
    {
        $ProductsModel = new Products();

        if ($ProductsModel->load(Yii::$app->request->post()) && $ProductsModel->save()) {
            Yii::$app->session->setFlash('success', "Product Added Successfully");
            return $this->redirect(['create']);
        }
        else{ 
            return $this->render('create', [
                'ProductsModel' => $ProductsModel
            ]);
        }
    }
}
0
Sanju Kaniyamattam