Yii setFlash

见过的所有的MVC(Rails, TP, CakePHP)中, Flash这个东西都是放于SESSION中的, Yii也不例外。Yii里面的Flash由CWebUser管理, 也就是当前用户的唯一标示管理对象Yii::app()->user

设置消息方式:
//Yii::app()->user->setFlash($key,$value,$defaultValue=null)
# 成功信息提示
Yii::app()->user->setFlash('success', "Thinks saved success!");
# 错误信息提示
Yii::app()->user->setFlash('error', "here has an Error, Please check that!");
# 一般消息信息提示
Yii::app()->user->setFlash('notice', "messge here");

上面的$key所有的都是可以自定义的. Yii只是把上面的信息按照一定的规则放于用户的SESSION信息中。

前台页面显示时候可以通过getFlash($key,$defaultValue=null,$delete=true)来获取指定的$key来获取相应的信息。
# 获取成功提示信息
Yii::app()->user->getFlash('success');

我们可以通过简单的统一格式来显示这些信息:
foreach(Yii::app()->user->getFlashes() as $key => $message) {
echo '<div class="flash-' . $key . '">' . $message . "</div>\n";
}

默认调用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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值