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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение EVOSandru6 »

Добрый день,

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

Код: Выделить всё

$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');
});
Но не знаю - куда это вставлять? Подскажите пожалуйста.
Ответить