Yii2: ajax form validation on an ajax submitted form

后端 未结 2 524
滥情空心
滥情空心 2021-02-01 09:28

I\'m wondering if any Yii2 experts can help me understand how best to work with ajax forms combined with Yii ajax validation. I think I can explain the issue without taking you

相关标签:
2条回答
  • 2021-02-01 09:35

    You should set up validationUrl with a different URL compared to the URL that you are submitting the form to. In this way you can have the validation function that would validate and return the return ActiveForm::validate($model); and the normal submit form that does something else.

    You can read more about validationUrl here:

    0 讨论(0)
  • 2021-02-01 09:52

    I have found solution :

    Form :

     <?php
        $form = ActiveForm::begin(['id' => 'form-add-contact', 'enableAjaxValidation' => true, 'validationUrl' => Yii::$app->urlManager->createUrl('contacts/contacts/contact-validate')]);
        ?>
    

    Submit Via Ajax :

    <?php
    $script = <<< JS
    
       $(document).ready(function () { 
            $("#form-add-contact").on('beforeSubmit', function (event) { 
                event.preventDefault();            
                var form_data = new FormData($('#form-add-contact')[0]);
                $.ajax({
                       url: $("#form-add-contact").attr('action'), 
                       dataType: 'JSON',  
                       cache: false,
                       contentType: false,
                       processData: false,
                       data: form_data, //$(this).serialize(),                      
                       type: 'post',                        
                       beforeSend: function() {
                       },
                       success: function(response){                         
                           toastr.success("",response.message);                            
                       },
                       complete: function() {
                       },
                       error: function (data) {
                          toastr.warning("","There may a error on uploading. Try again later");    
                       }
                    });                
                return false;
            });
        });       
    
    JS;
    $this->registerJs($script);
    ?>
    

    Controller :

    /*
         * CREATE CONTACT FORM  AJAX VALIDATION ACTION
         */
    
        public function actionContactValidate() {
            $model = new ContactsManagement();
            if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
                $model->company_id = Yii::$app->user->identity->company_id;
                $model->created_at = time();
                \Yii::$app->response->format = Response::FORMAT_JSON;
                return ActiveForm::validate($model);
            }
        }
    
    
    /**
         * Quick Add Contact Action
         * @param type $id
         * @return type
         */
        public function actionAddContact() {           
    
            $model = new ContactsManagement();
    
            if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
    
                $transaction = \Yii::$app->db->beginTransaction();
    
                try {
                    if ($model->validate()) {
                        $flag = $model->save(false);
                        if ($flag == true) {
                            $transaction->commit();
    
                            return Json::encode(array( 'status' => 'success', 'type' => 'success', 'message' => 'Contact created successfully.'));
                        } else {
                            $transaction->rollBack();
                        }
                    } else {
                        return Json::encode(array('status' => 'warning', 'type' => 'warning', 'message' => 'Contact can not created.'));
                    }
                } catch (Exception $ex) {
                    $transaction->rollBack();
                }
            }
    
            return $this->renderAjax('_add_form', [
                        'model' => $model,
            ]);
        }
    
    0 讨论(0)
提交回复
热议问题