我跟着这个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消息看起来像普通消息的东西。
答案 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
]);
}
}
}