2015-07-13 25 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())