我看官方的高级模版的示例中的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了。