<?php Yii::app()->user->setFlash(‘success’,”Data saved!”); 设置键值名为success的临时信息.在getFlash后删除. 可以定义多种不同的键值名对象的消息. ?> <?php if(Yii::app()->user->hasFlash(‘success’)):?> 消息存在里, <div> <?php echo Yii::app()->user->getFlash(‘success’); ?> 输出消息内容,输出后,就不存在了. </div> <?php endif; ?> <?php //这是一段,在显示后定里消失的JQ代码,已集成至Yii中. Yii::app()->clientScript->registerScript( ‘myHideEffect’, ‘$(“.info”).animate({opacity: 1.0}, 3000).fadeOut(“slow”);’, CClientScript::POS_READY ); ?>
默认调用getFlashe这些方法后会自动删除SESSION值的。 在一个请求中, 请求页面设置的flash, 可以在它当前页面显示, 也可以用于下一个页面显示(比如用户注册成功后,需要302跳转到一个新页面中, 新页面来显示这个注册成功的消息。 这个是可行的),但是除此之外的请求中是不能显示的。 是因为Yii CWebUser会自动检查flash. 所以检查机制会自动删除这些过期的消息
如需要也可以把flash设置为只有执行了getFlashe方法才允许删除flash消息。只需要在配置文件里面设置用户组件属性autoUpdateFlash为FALSE即可
array ( 'components'=>array( 'user' => array( 'autoUpdateFlash' => FALSE //设置为false ), ... ), ... )
Flash也经常与CController方法refresh()方法一起使用来刷新页面:
/** * Displays the contact page */ public function actionContact() { $model=new ContactForm; if(isset($_POST['ContactForm'])) { $model->attributes=$_POST['ContactForm']; if($model->validate()) { $headers="From: {$model->email}\r\nReply-To: {$model->email}"; mail(Yii::app()->params['adminEmail'],$model->subject,$model->body,$headers); Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.'); $this->refresh(); // 刷新页面 } } $this->render('contact',array('model'=>$model)); }