我读了这个问题的相似主题,但我找不到解决方案。我有一个通过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();
}
答案 0 :(得分:1)
您尚未设置模型的属性并尝试进行验证。 将其更正为,在验证前设置属性: -
$model->attributes = $_POST['RegistrationForm'];
之前使用上述声明: -
if($model->validate())
答案 1 :(得分:0)
我只是移动
$model->attributes = $_POST['RegistrationForm']
并在
之前设置if($model->validate())
答案 2 :(得分: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.
}
}