私はこれに従いました リンク 。私のコードはコントローラで次のとおりです
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でフラッシュメッセージが必要なのですか。フラッシュメッセージが通常のメッセージのように見えるコードに何かが欠けていると思います。
フラッシュメッセージの設定
フラッシュメッセージは、同じユーザーの1つまたは複数の要求を通じてメッセージをセッションに保持するために使用されます。デフォルトでは、ユーザーに表示された後、セッションから削除されます。
フラッシュメッセージは setFlash() メソッドを使用して設定できます
以下のようなコードをcontroller
ファイルに追加します。
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() メソッドを使用します。
デフォルトでは、メッセージをフェッチするとセッションから削除されます。これは、メッセージがユーザーに提供される最初のページにのみ表示されることを意味します。フェッチメソッドには、この動作を変更できるブールパラメータがあります。
したがって、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-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; ?>
これは古いことは知っていますが、Google検索の最初の結果なので更新します。設定部分はyii2でも同じです。コントローラーでこれを追加するだけです。
Yii::$app->session->setFlash('danger', 'you message');
setFlash
の最初の引数は次のいずれかです。
error,danger,success,info,warning
フラッシュメッセージのスタイルの色を決定します。
表示部分については、これをレイアウトファイルに配置するだけです。
<?= common\widgets\Alert::widget() ?>
レイアウトファイルがない場合は、falshメッセージを表示するビューに追加するだけです。
この答えが他の人に役立つことを願っています。
フラッシュメッセージの利点は、一度しか表示されないことです。もうif/elseロジックを提供する必要はありません。また、レイアウトビューファイル(多くの場合、view/layout/main.php)にフラッシュメッセージを表示するコードを配置すると、必要なすべてのアクションでフラッシュメッセージを設定でき、通常の応答またはリダイレクトを使用できます。一度だけ表示されること。それは人生を少し楽にします。それはフラッシュメッセージのアイデアです-それは一定期間後に消えるということではありません。
guide のフラッシュメッセージに関するセクションを参照してください。
少ないコード。他の条件が続く場合はしたくない場合
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
]);
}
}
}