如何在Yii2中设置Flash消息?

时间:2015-09-26 04:17:19

标签: yii2 flash-message

我跟着这个Link。我的代码如下 在控制器

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>

现在我所做的结果并不是我的预期。我收到了一条消息&#34;成功进入付款页面&#34;就像我回应它一样。如果它与echo类似,那么为什么我们在Yii2中需要一条flash消息。我想我的代码中可能会遗漏一些使我的flash消息看起来像普通消息的东西。

5 个答案:

答案 0 :(得分:36)

设置Flash消息

使用flash消息以通过同一用户的一个或多个请求将消息保持在会话中。默认情况下,它会在向用户显示后从会话中删除。

可以使用setFlash()方法

设置Flash消息

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

示例:

view

显示Flash消息

要检查Flash消息,我们使用hasFlash()方法并获取我们使用getFlash()方法的Flash消息。

默认情况下,提取消息会从会话中删除它。这意味着消息仅在显示给用户的第一页上显示。提取方法有一个布尔参数,可以改变这种行为。

因此,在// 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; ?> 中显示上面定义的Flash消息是由

完成的
 <string-array name="music">
        <item value="Yes">Si</item>
        <item value="No">No</item>
    </string-array>

答案 1 :(得分:3)

flash消息的优点是它只显示一次。您不再需要提供if / else逻辑。如果您将代码放在布局视图文件中显示flash消息(通常是view / layout / main.php),您可以在需要的每个操作中设置flash消息,使用正常响应或重定向,您可以确定它只显示一次。这让生活变得更轻松。这就是flash消息的想法 - 而不是它在一段时间后消失。

请参阅guide中有关Flash消息的部分。

答案 2 :(得分:2)

我知道这很旧,但这是google搜索的第一个结果,因此我将对其进行更新。 yii2中的设置部分仍然相同,只需将其添加到控制器中

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

setFlash的第一个参数可以是以下任意一个:

error,danger,success,info,warning

这将确定即时消息的样式颜色。

现在对于显示部分,您要做的就是将其放置在布局文件中:

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

如果没有布局文件,只需将其添加到要在其中显示错误消息的任何视图中即可。

希望这个答案对其他人有帮助。

答案 3 :(得分: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') ?>

答案 4 :(得分: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
            ]);
        }
    }
}