如何避免使用ajax验证即时保存模型?

时间:2017-07-06 11:18:03

标签: yii2

我想在更新之前添加Ajax验证以检查表单。在视图中,添加到必填字段

['enableAjaxValidation' => true]

在actionUpdate的控制器中

if (Yii::$app->request->isAjax && $modelForm->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            if ($modelForm->validate()) {
                $model->setAttributes($modelForm->getAttributes());

                if ($model->save()) {
                    return $this->redirect([my way]);
                }

                if ($model->hasErrors()) {
                    return ActiveForm::validate($model);
                } else {
                    return ['success' => 1, 'html' =>
                        $this->renderPartial('view', [my data];
                }
            } else {
                return ActiveForm::validate($modelForm);
            }
        }

问题是在字段中选择任何值,即" enableAjaxValidation" =>是的,立即导致模型的保存(即使不按下保存按钮)。如何避免这种情况?

2 个答案:

答案 0 :(得分:1)

在控制器中尝试这样:

$model = new ExampleForm;

// validate any AJAX requests fired off by the form
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    Yii::$app->response->format = Response::FORMAT_JSON;
    return ActiveForm::validate($model);
}

if语句之前添加此内容,并从if语句中删除Yii::$app->request->isAjax

答案 1 :(得分:0)

在表单中添加以下内容

$form = ActiveForm::begin([
            'id' => 'example',
            'action' => ['your_action'],
            'validateOnSubmit' => true,
            'enableAjaxValidation' => true,
        ])