0

我阅读了这个问题的类似主题,但我没有找到解决方案。我有一个通过 ajax 加载的表单。当所有数据都有效时,它们不会保存在数据库中并向我显示控制台中的验证错误。在我的用户模型中我 ** 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();     
    }
4

3 回答 3

1

您尚未设置模型的属性并尝试进行验证。将其更正为,在验证之前设置属性:-

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

在之前使用上述语句:-

if($model->validate())
于 2015-08-30T10:52:55.133 回答
0

我只是移动

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

并在之前设置

if($model->validate())
于 2015-07-13T08:42:29.713 回答
0

$model->validate()在没有为 的属性设置任何值的情况下调用了class RegistrationForm.

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.
    }
}
于 2015-07-13T08:47:28.527 回答