Как установить флэш-сообщение в 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 ed его. Если это похоже на echo, зачем нам нужно флэш-сообщение в Yii2. Я думаю, что мне может не хватать чего-то в моем коде, что делает мое флеш-сообщение обычным.

5 ответов


настройка flash-сообщения

флэш-сообщение используется для того, чтобы сохранить сообщение в сессии через одну или несколько запросов одного и того же пользователя. По умолчанию он удаляется из сеанса после его отображения пользователю.

Флэш-сообщения могут быть установлены с помощью setFlash() метод

добавить ниже код в ваш как:

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

пример:

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

отображение вспышки сообщение

для проверки сообщения мы используем hasFlash() метод и для получения флэш-сообщения мы используем getFlash() метод.

по умолчанию при получении сообщения оно удаляется из сеанса. Это означает, что сообщение должно отображаться только на первой странице, поданной пользователю. Методы выборки имеют логический параметр, который может изменить это поведение.

таким образом, отображение flash-сообщения определено выше в view осуществляется

// 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-error 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; ?>

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

см. раздел о флэш-сообщения в руководство.


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

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

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

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

Я знаю, что это старый, но это первый результат в поиске google, поэтому я обновлю его. Часть настройки все та же в yii2, все, что вам нужно сделать, это добавить это в свой контроллер

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

первый аргумент setFlash может быть любой из :

error,danger,success,info,warning

который будет определять цвет стиля флэш-сообщения.

теперь для отображения части, все, что вам нужно сделать, это поместить это в файл макета:

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

если у вас нет файл макета, просто добавьте его в любой вид, в котором вы хотите отобразить ложное сообщение.

надеюсь, что этот ответ поможет другим.