2015-09-26 6 views
8

Я следил за этим Link. Мой код выглядит следующим образом в контроллереКак установить флэш-сообщение в 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]); 
    } 

в представлении

<div id="message"> 

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

теперь в результате того, что я сделал это не то, что я ожидал. Я получил сообщение «успешно попал на страницу оплаты», как будто я его откликнулся. Если он похож на echo, то зачем нам флэш-сообщение в Yii2. Я думаю, что в моем коде может отсутствовать что-то, что делает мое флеш-сообщение похожим на обычный.

+3

Вы смущены о том, что вспышка сообщение есть (в yii). Это просто сообщение, которое будет отображаться один раз, а затем удаляется из сеанса. – DrunkWolf

+0

Да, я был немного смущен. – Bloodhound

ответ

20

добавить ниже код в ваш controller файл, например:

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

А также добавить ниже код в ваш 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

спасибо, что это работает. так что теперь у меня есть два способа сделать это :-) – Bloodhound

+0

Хороший ответ. Спасибо. – Chinmay235

+0

[This] (http://www.devprofessor.com/yii2/use-yii2-flash-message/) объясняет немного больше о Yii2 Flash Message. –

2

Преимущество сообщения флэш является то, что он получает только показано один раз. Вам больше не нужно предоставлять логику if/else. И если вы поместите код для отображения флэш-сообщения в файле вида макета (часто view/layout/main.php), вы можете установить флеш-сообщение в каждом действии, где оно необходимо, использовать обычные ответы или перенаправления, и вы можете быть уверены что он отображается только один раз. Это облегчает жизнь. Это идея флеш-сообщений - не то, что она исчезает через определенный период.

См. Раздел о флэш-сообщениях в guide.

+0

спасибо. моя концепция флэш-мессажа была совсем другой – Bloodhound

1

Меньше кода. Если вы не хотите, если еще условие следовать

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

И на ваш взгляд

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

Замечательно, что это работает для меня – faisal1208

0

Ниже приводится класс контроллера для добавления продуктов

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