@EVOSandru6

Как в Yii2 перехватить ответ в ajax Validation формы?

Добрый день,

Есть такая форма:

$form = ActiveForm::begin([
                'id'=>$model->formName(),
                'validationUrl'=>Url::to(['/orders/default/validation']),
                'enableAjaxValidation'=>true,
                'enableClientValidation'=>true,
                'validateOnBlur'=>true,
                'validateOnChange'=>true,
                 'fieldConfig' => [
                     'template' => '<div class="c-order-checkout__group">{label}{input}{error} </div>',
                     'inputOptions'=>[
                         'class'=>'form-control h-form__input h-input-response'
                     ],
                     'options' => [
                         'tag' => false,
                     ],
                 ]
            ]);


ValidateAction:
class ValidationAction extends Action
{
    public function run() // $id
    {
        $model = new $this->modelClass;
        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($model); 
        }
    }
}


При нажатии на кнопку Submit формы, в Firebug XHR Хрома содержится ответ в виде JSON:

{"orders-user_name":["Необходимо заполнить «user-name»."],"orders-user_phone":["Необходимо заполнить «Телефон»."],"orders-user_email":["Необходимо заполнить «e-mail»."],"orders-customer_id":["Необходимо заполнить «Пользовать»."]}


Но данные ошибки не выводятся автоматически в блоки с классами help-block рядом с полями формы. Получается надо самому это реализовывать? Или я где то накосячил?

Нарыл такой скрипт Jquery:

$.each(data, function(key, val) {
      $('#'+key).after('<div class='help-block'>'+val+'</div>');
      $('#'+key).closest('.form-group').addClass('has-error');
});


Но не знаю - куда это вставлять? Подскажите пожалуйста.
  • Вопрос задан
  • 983 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Есть события, которые кидает activeForm, например:
$('form').on('afterValidateAttribute', function(event, attr, msg) {
        console.log(event);
        console.log(attr);
        console.log(msg);
    });

Кроме этого можно в настройках rules прописывать js:
['title','string','max'=>400, 'whenClient'=>function (attribute, value) {
    return $('#country').val() === 'USA';
}]

подробнее тут: www.yiiframework.com/doc-2.0/yii-validators-valida...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы