入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Yii setFlash getFlash用法

创建时间:2017-01-14 投稿人: 浏览次数:133
Yii里面的Flash由CWebUser管理, 也就是当前用户的唯一标示管理对象Yii::app()->user,下面具体解释下。

1、设置消息

在Controller页面编写相关信息,用法:

//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信息中。

2、获取消息

在view视图中,即前台页面指定$key来获取相应的信息,用法:

getFlash($key,$defaultValue=null,$delete=true);

给出几个例子

# 获取1中  成功提示信息
Yii::app()->user->getFlash("success");
可以通过简单的统一格式来显示这些信息:
foreach(Yii::app()->user->getFlashes() as $key => $message) {
echo "<div class="flash-" . $key . "">" . $message . "</div>
";
}

3、举个Yii数据库保存成功页面显示信息的例子

Controller中部分代码:

 if($yourModel ->save()){
     Yii::app()->user->setFlash("success","修改信息成功,请提交!");
                    
 }//$yourModel 是某个Model的对象

View中部分代码:

<!--输出数据库保存成功信息-->
<div id="databaseInfo">
<p align="center" class="MsoNormal" style="margin-top: 3px; margin-left: 5cm; text-align: left">
<span style="font-size: 16pt; color: blue; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: "times new roman"; mso-hansi-font-family: "times new roman"">
<b><?php echo Yii::app()->user->getFlash("success"); ?></b>
</span>
 </p>
</div>

4、原理说明

默认调用getFlashe这些方法后会自动删除SESSION值的。 在一个请求中, 请求页面设置的flash, 可以在它当前页面显示, 也可以用于下一个页面显示(比如用户注册成功后,需要302跳转到一个新页面中, 新页面来显示这个注册成功的消息。 这个是可行的),但是除此之外的请求中是不能显示的。 是因为Yii CWebUser会自动检查flash. 所以检查机制会自动删除这些过期的消息。


如需要也可以把flash设置为只有执行了getFlashe方法才允许删除flash消息。只需要在配置文件里面设置用户组件属性autoUpdateFlash为FALSE即可
array (
"components"=>array(
"user" => array(
"autoUpdateFlash" => FALSE //设置为false
),
...
),
...
)

5、补充

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}
Reply-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));
}


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。