How can i use ActiveForm with these requirements?
Submit form with ajax.
Before submitting with ajax: Check if error exits.
After submitting: Display error of field under field's input if the server responses unsuccess saving result.
This is your form in view. I prefer use different actions for validation and saving. You can join them into single method.
<?php $form = \yii\widgets\ActiveForm::begin([ 'id' => 'my-form-id', 'action' => 'save-url', 'enableAjaxValidation' => true, 'validationUrl' => 'validation-rul', ]); ?> <?= $form->field($model, 'email')->textInput(); ?> <?= Html::submitButton('Submit'); ?> <?php $form->end(); ?>
In validation action you should write. It validates your form and returns list of errrs to client. :
public function actionValidate() { $model = new MyModel(); $request = \Yii::$app->getRequest(); if ($request->isPost && $model->load($request->post())) { \Yii::$app->response->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } }
And this is save action. In validate input data for security:
public function actionSave() { $model = new MyModel(); $request = \Yii::$app->getRequest(); if ($request->isPost && $model->load($request->post())) { \Yii::$app->response->format = Response::FORMAT_JSON; return ['success' => $model->save()]; } return $this->renderAjax('registration', [ 'model' => $model, ]); }
This code will validate your form in actionValidate() and. For submitting your form via AJAX use beforeSubmit event. In your javascript file write:
$(document).on("beforeSubmit", "#my-form-id", function () { // send data to actionSave by ajax request. return false; // Cancel form submitting. });
That's all.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With