frank007
(Shunhui29)
1
需要验证用户的输入,但不保存到数据库中,只是收集用户数据。代码如下:
Model:
public function rules(){
return array(
array('username','required','on'=>'search'),
);
}
由于不保存数据到数据库中,所以就采用 model->validate(array(‘username’))来判断该字段是否不为空
Controller:
if(isset($_POST['Email']) && $search->validate(array('username')){
................
}
这样不起作用,username字段有值也报 ‘为空’,不知道是怎么回事??? 
qiang
(Qiang Xue)
2
你有没有给model的属性l赋值?
另外,注意一下scenario。validate()仅执行对应scenario的rule。
frank007
(Shunhui29)
3
谢谢强哥的回答 ,
我自己写了和Yii类似的验证,把问题解决了,不过我还是想弄明白有关验证具体使用情况,用Yii来验证真的很方便。
在最开始new一个对象时,我指定了scenario: $search = new Email(‘search’);
我是在提交表单时来做判断的:
if(isset($_POST['Email']) && $search->validate(array('username'))){..............}
最开始没有给Model属性赋值,用户输入数据后才给属性赋值。
我的主要目的是:用CGridViewg来显示数据,用户通过输入表单值来过滤要显示的数据,只是用rules来判断用户输入值是否为空。
frank007
(Shunhui29)
4
看demo中的blog,在登陆页面也只是收集数据,不保存,blog它那种方式就可以实现验证,我也按照一样的方式,可就是不行。 
qiang
(Qiang Xue)
5
你需要先赋值后验证:
if(isset($_POST['Email'])) {
$search->attributes=$_POST['Email'];
if($search->validate(...))...
}