首页 > yii2 session flash message 为何无法显示?

yii2 session flash message 为何无法显示?

我看官方的高级模版的示例中的contact页面会显示session中的flash信息,为何我的不显示呢?

public function actionContact()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail(Yii::$app->params['adminEmail'])) {
                Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
            } else {
                Yii::$app->session->setFlash('error', 'There was an error sending email.');
            }

            return $this->refresh();
        } else {
            return $this->render('contact', [
                'model' => $model,
            ]);
        }
    }

contact文件中并没有显示message的代码

<?php

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model \frontend\models\ContactForm */

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\captcha\Captcha;

$this->title = 'Contact';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-contact">
    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
    </p>

    <div class="row">
        <div class="col-lg-5">
            <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>

                <?= $form->field($model, 'name')->textInput(['autofocus' => true]) ?>

                <?= $form->field($model, 'email') ?>

                <?= $form->field($model, 'subject') ?>

                <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>

                <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
                    'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
                ]) ?>

                <div class="form-group">
                    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
                </div>

            <?php ActiveForm::end(); ?>
        </div>
    </div>

</div>

显示了message信息:Thank you for contacting us. We will respond to you as soon as possible.

我的代码中使用了

\Yii::$app->session->setFlash('success','添加文章成功');

没有显示message:添加文章成功

public function actionCreate()
    {
        $article=new Article();
        $articleData=new ArticleData();
        $articleData->getErrors();
        if(\Yii::$app->request->isPost){
            $article->attributes=\Yii::$app->request->post('Article');
            $transaction=Article::getDb()->beginTransaction();
            try{
                if($article->save()){
                    $articleData->id=$article->id;
                    $articleData->content=\Yii::$app->request->post('content');
                    if($articleData->save()){
                        $transaction->commit();
                        \Yii::$app->session->setFlash('success','添加文章成功');
                        return $this->refresh();
                    }else{
                        $transaction->rollBack();
                    }
                }else{
                    $transaction->rollBack();
                }
            } catch(\Exception $e){
                $transaction->rollBack();
                throw $e;
            }

        }
        return $this->render('article',['article'=>$article,'articleData'=>$articleData]);
    }

不知哪里出了问题?


奥秘在frontend/views/layouts/main.php

在这有个 <?= Alert::widget() ?>

如果是高级版本的话看下commons/widgets/Alert


控制器内设置FLASH

Yii::$app->session->setFlash('success','添加文章成功');

模板里加入代码

<?php if (Yii::$app->session->hasFlash('success')): ?>
    <div class="alert alert-success alert-dismissable">
        <?php echo Yii::$app->session->getFlash('success') ?>
    </div>
<?php endif ?>

PS:因为他是SESSION存和取的过程,显示FLASH也就是取那条SESSION了。

【热门文章】
【热门文章】