CModel->validate()方法只能用在 save()或者insert()方法中吗?

需要验证用户的输入,但不保存到数据库中,只是收集用户数据。代码如下:

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字段有值也报 ‘为空’,不知道是怎么回事??? :unsure:

你有没有给model的属性l赋值?

另外,注意一下scenario。validate()仅执行对应scenario的rule。

谢谢强哥的回答 , :rolleyes: 我自己写了和Yii类似的验证,把问题解决了,不过我还是想弄明白有关验证具体使用情况,用Yii来验证真的很方便。

在最开始new一个对象时,我指定了scenario: $search = new Email(‘search’);

我是在提交表单时来做判断的:


if(isset($_POST['Email']) && $search->validate(array('username'))){..............}

最开始没有给Model属性赋值,用户输入数据后才给属性赋值。

    我的主要目的是:用CGridViewg来显示数据,用户通过输入表单值来过滤要显示的数据,只是用rules来判断用户输入值是否为空。

看demo中的blog,在登陆页面也只是收集数据,不保存,blog它那种方式就可以实现验证,我也按照一样的方式,可就是不行。 :unsure:

你需要先赋值后验证:




if(isset($_POST['Email'])) {

     $search->attributes=$_POST['Email'];

     if($search->validate(...))...

}



好的,我试下,谢谢强哥! :rolleyes: