2015-09-26 23 views
8

Obserwowałem to Link. Mój kod wygląda następująco kontrolerJak ustawić wiadomość flash w Yii2?

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

w widoku

<div id="message"> 

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

teraz w wyniku, czego nie ma, czego się spodziewałem. Dostałem wiadomość "pomyślnie przejdzie na stronę płatności", tak jak to zrobiłem. Jeśli jest podobny do echa, to dlaczego potrzebujemy wiadomości flashowej w Yii2. Myślę, że może mi brakować czegoś w moim kodzie, który sprawia, że ​​moja wiadomość flash wygląda jak zwykła.

+3

Jesteś mylić co błysk wiadomość jest (w yii). To po prostu wiadomość, która pojawi się raz, a następnie zostanie usunięta z sesji. – DrunkWolf

+0

Tak, byłem nieco zdezorientowany. – Bloodhound

Odpowiedz

20

dodać poniżej kodu w pliku jak controller:

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

a także dodać poniżej kodu w pliku jak view:

<?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; ?> 
+0

dzięki to działa. więc mam teraz dwa sposoby na zrobienie tego :-) – Bloodhound

+0

Dobra odpowiedź. Dziękuję Ci. – Chinmay235

+0

[This] (http://www.devprofessor.com/yii2/use-yii2-flash-message/) wyjaśnia nieco więcej o Yii2 Flash Message. –

2

Zaletą wiadomości błyskawicznej jest to, że zostanie pokazany tylko pewnego razu. Nie musisz już podawać logiki if/else. A jeśli umieścisz kod wyświetlający wiadomość flash w pliku widoku układu (często widok/layout/main.php) możesz ustawić wiadomość flash w każdej akcji, gdzie jest ona potrzebna, użyj zwykłych odpowiedzi lub przekierowań i możesz być pewien że wyświetla się tylko jeden raz. To sprawia, że ​​życie jest trochę łatwiejsze. Taka jest idea wiadomości flash - nie, że znika po pewnym czasie.

Zobacz rozdział dotyczący wiadomości flash w numerze guide.

+0

dzięki. moja koncepcja flash messsage była zupełnie inna – Bloodhound

1

Mniej kodu. Jeśli nie chcesz, jeśli warunek else śledzić

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

iw widoku

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

Cudownie działa dla mnie – faisal1208

0

Poniżej jest klasa kontroler dla produktów dodając

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