2015-07-13 27 views
0

我读过类似的这个问题的主题,但我没有找到解决方案。我有一个通过ajax加载的表单。当所有的数据是有效的,他们没有在数据库保存,并告诉我验证错误console.in我的用户模型我** ** set return parent::beforeSave(); in beforeSave method这是我的行动:

  public function actionRegister() 
{  
       $model = new RegistrationForm; 
       if(isset($_POST['ajax']) && $_POST['ajax']==='register-form') 
       { 
        $this->ajaxValidate($model); 
       } 
       if(isset($_POST['RegistrationForm'])) 
       { 
        if($model->validate()) 
        { 
        $model->attributes = $_POST['RegistrationForm']; 
        $user = new User; 
        $user->attributes = $model->attributes; 
        if($user->save()) 
         echo 1; 
        }else{ 
          $errors = $model->getErrors(); 
          var_dump($errors); 
          exit; 
        } 
       } 
       $this->renderPartial('register', array('model' => $model),false,true); 
    public function ajaxValidate($model) 
    { 
       echo CActiveForm::validate($model); 
       Yii::app()->end();  
    } 
+0

请出示'var_dump'。 – Mave

回答

0

我只是移动

$model->attributes = $_POST['RegistrationForm'] 

,并设置前

if($model->validate()) 
+0

使用'$ model-> setAttributes($ _ POST ['RegistrationForm'],false);'而不是'$ model-> attributes = $ _POST ['RegistrationForm']' –

0

你没有任何值设置的class RegistrationForm属性称为$model->validate()

validate以这种方式工作:

你有一个类RegistrationForm和必需属性fooField

class RegistrationForm extends \CModel 
{ 
    public $fooField; 

    public function rules() 
    { 
     return [ 
      ['fooField', 'required'] 
     ]; 
    } 
} 

当RegistrationForm被另一个类调用,让我们说Bar

class Bar 
{ 
    public function actionRegister() 
    { 
     $form = new RegistrationForm(); 
     $form->validate(); // This will return false since `RegistrationForm->fooField` is required. 

     $form->fooField = 'Some value'; 
     $form->validate(); // This will return true since `RegistrationForm->fooField` has a value. 
    } 
} 
1

您没有设置模型的属性,并尝试做验证。 纠正它,通过验证之前设置的属性: -

$model->attributes = $_POST['RegistrationForm']; 

使用上述声明之前: -

if($model->validate())