2014-04-17 49 views
0

我想在一个控制器中检查不同的验证。Yii:检查不同场景的规则

我有问题,

当用户登录第一次在那个时候我想要做以下验证

array('name, email, password, location, confirm_password', 'required','on'=>'create'), 
array('confirm_password', 'compare', 'compareAttribute' => 'password','on'=>'create,fbuser'),  
array('email','unique','on'=>'create'), 

,如果用户已经与FB注册,并试图在那个时候注册我想要做下面的验证(我不想来验证这种情况下,电子邮件地址)

array('name, password, location, confirm_password', 'required','on'=>'fbuser'), 
    array('confirm_password', 'compare', 'compareAttribute' => 'password','on'=>'create,fbuser'), 

这是我的控制器方法...

public function actionCreate() 
    { 
      $model=new AppUser('create'); 

      if(!Yii::app()->user->isGuest) 
       $this->redirect('/'); 

      if(Yii::app()->request->isPostRequest) 
      { 
        if($model->isFbUser($_POST['email'])){ 
         $model->scenario = 'fbuser'; 
         if($model->validate()) 
          $this->redirect(array('/Appuser/fbauth','email'=> $_POST['email'])); 
        } 
        else 
         $model->scenario = 'create'; 

        $model->attributes=$_POST; 
        if($model->save()) 
          $this->redirect('/login'); 
      } 

      $this->render('create',array(
        'model'=>$model, 
      )); 
    } 

但它没有正确验证。

任何人都可以帮我解决它吗?

在此先感谢

回答

1

我想问题可能是,是,如果(isFbUser)子句中你没有验证之前,分配后的数据模型。

你对我的使用情况看起来不错。

+0

isFbUser是我的函数,基于某些条件返回true或false,如果我删除所有验证,它的工作正常。 –

+0

我相信你是isFbUser正在工作,但是如果它返回true,你将在$ model-> validate()之后执行两行。您尚未将发布数据分配给您的模型,因此模型数据无法验证。 – i4h

+0

非常感谢..它是一个非常愚蠢的错误,我做了 –