it-swarm.com.de

Wie kann ich eine Flash-Nachricht in Yii2 einstellen?

ich folgte diesem Link . Mein Code lautet wie folgtin Controller

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]);
    }

in der Ansicht

 <div id="message">

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

jetzt ist das Ergebnis dessen, was ich getan habe, nicht das, was ich erwartet hatte. Ich habe eine Nachricht erhalten, dass die Zahlung erfolgreich war. Wenn es dem Echo ähnelt, warum brauchen wir in Yii2 eine Flash-Nachricht. Ich denke, ich vermisse möglicherweise etwas in meinem Code, das meine Flash-Nachricht wie eine normale erscheinen lässt. 

14
Bloodhound

Flash-Nachricht einstellen

Eine Flash-Nachricht wird verwendet, um eine Nachricht durch eine oder mehrere Anforderungen desselben Benutzers in Sitzung zu halten. Standardmäßig wird es aus der Sitzung entfernt, nachdem es dem Benutzer angezeigt wurde. 

Flash-Nachrichten können mit der setFlash () - Methode gesetzt werden

Fügen Sie den folgenden Code in Ihrer controller-Datei hinzu:

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

Beispiel:

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
         ]);
    }
}

Flash-Nachricht anzeigen

Um nach Flash-Nachrichten zu suchen, verwenden wir die Methode hasFlash () . Um die Flash-Nachricht zu erhalten, verwenden wir die Methode getFlash ()

Wenn Sie eine Nachricht abrufen, wird sie standardmäßig aus der Sitzung gelöscht. Dies bedeutet, dass eine Nachricht nur auf der ersten Seite angezeigt werden soll, die dem Benutzer bereitgestellt wird. Die Abrufmethoden verfügen über einen booleschen Parameter, der dieses Verhalten ändern kann.

Das Anzeigen der oben definierten Flash-Nachricht in einer view erfolgt durch

// 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

Der Vorteil der Flash-Nachricht ist, dass sie nur einmal angezeigt wird. Sie müssen die if/else-Logik nicht mehr angeben. Wenn Sie den Code zur Anzeige der Flash-Nachricht in die Layout-Ansichtsdatei (häufig view/layout/main.php) einfügen, können Sie die Flash-Nachricht in jeder gewünschten Aktion festlegen, normale Antworten oder Umleitungen verwenden und Sie können sich sicher sein dass es nur einmal angezeigt wird. Das macht das Leben ein bisschen einfacher. Das ist die Idee der Flash-Nachrichten - nicht, dass sie nach einer bestimmten Zeit verschwinden.

Siehe Abschnitt zu Flash-Meldungen in der Anleitung .

3
robsch

Weniger Code. Wenn Sie nicht wollen, wenn sonst Bedingung folgen

 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>'
  );

Und aus deiner Sicht

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

Ich weiß, das ist alt, aber es ist das erste Ergebnis in der Google-Suche. Ich werde es also aktualisieren .. Der Einstellungs-Teil ist in yii2 immer noch derselbe, alles, was Sie tun müssen, ist dies in Ihrem Controller hinzuzufügen

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

das erste Argument von setFlash könnte Folgendes sein:

error,danger,success,info,warning

dadurch wird die Stilfarbe der Flash-Nachricht festgelegt.

Jetzt müssen Sie nur noch den angezeigten Teil in Ihre Layout-Datei einfügen: 

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

wenn Sie keine Layoutdatei haben, fügen Sie sie einfach in einer beliebigen Ansicht hinzu, in der Sie eine falsche Nachricht anzeigen möchten.

Hoffe, diese Antwort hilft anderen.

1
Anas Dawood

Nachfolgend finden Sie die Controller-Klasse zum Hinzufügen von Produkten

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