Yii2: ajax form validation on an ajax submitted form
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:
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, ]); }