Как вывести ошибки ajax валидации табличного ввода?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Как вывести ошибки ajax валидации табличного ввода?

Сообщение slo_nik »

Доброе утро.
Подскажите, как правильно вывести ошибки валидации в форме?
Есть форма, в ней есть набор параметров для габаритов груза(длина, ширина, высота и так далее).
Первый набор параметров скрыт css, при выборе в выпадающем списке пункта "я знаю параметры груза" этот пункт становится видимым и рядом кнопка "добавить". При щелчке на "добавить" появляется ещё один набор параметров.
Изображение
В виде эти поля формируются так:

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

<?php
   foreach($dimensions as $key => $dimension){
?>
 <div class="b-calcColumnHeader">Длина (см)</div>
 <?= $form->field($dimension, "[$key]length")->textInput([
      'class' => 'b-calcInput',
      'placeholder' => 'см',
      ])->label(false) ?>
 <div class="b-calcColumnHeader">Ширина (см)</div>
 <?= $form->field($dimension, "[$key]width")->textInput([
      'class' => 'b-calcInput',
      'placeholder' => 'см',
      ])->label(false) ?>
 <div class="b-calcColumnHeader">Высота (см)</div>
 <?= $form->field($dimension, "[$key]height")->textInput([
      'class' => 'b-calcInput',
      'placeholder' => 'см',
      ])->label(false) ?>
 <div class="b-calcColumnHeader">Масса (кг)</div>
 <?= $form->field($dimension, "[$key]mass")->textInput([
      'class' => 'b-calcInput',
      'placeholder' => 'кг',
      ])->label(false) ?>
 <div class="b-calcColumnHeader">Кол-во (шт)</div>
 <div class="b-numberInput">
 <div class="b-numberInput__plus"></div>
 <div class="b-numberInput__minus"></div>
 <?= $form->field($dimension, "[$key]qty")->textInput([
      'class' => 'b-calcInput j-numMask',
      'placeholder' => 'шт',
      ])->label(false) ?>
<?php
   }
?>
В контролере действие для валидации(модель для параметров Dimensions):

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

    public function actionAjaxValidate()
    {
        if(Yii::$app->request->isAjax){

            $dimensions = null;
            $calcform = null;

            $model = new MOdelName;
            $model->scenario = $scenario;

            // валидация параметров груза
            if(Yii::$app->request->post('Dimensions')){
                $count = count(Yii::$app->request->post('Dimensions', []));
                $models = [new Dimensions()];

                for($i = 1; $i < $count; $i++){
                    $models[] = new Dimensions();
                }
                if(Model::loadMultiple($models, Yii::$app->request->post())){

                    Yii::$app->response->format = Response::FORMAT_JSON;
                    $dimensions = ActiveForm::validateMultiple($models);
                }

            }
 
            if($model->load(Yii::$app->request->post())){
                Yii::$app->response->format = Response::FORMAT_JSON;
                $calcform = ActiveForm::validate($model);
            }

            if(Yii::$app->request->post('Dimensions')){
               return ArrayHelper::merge($calcform, $dimensions);
            }
            else{
                return $calcform;
            }
        }
    }
В форме, для .help-block, через ajax выставляются индексы:

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

<input id="dimensions-0-length" class="b-calcInput" name="Dimensions[0][length]" placeholder="см" aria-invalid="false" type="text">
После отправки формы, если есть ошибки валидации, надо подставить ошибку для соответствующего поля. В консоли браузера ошибки есть, сервер возвращает в ответе.
Как вывести ошибки для ajax валидации?

p.s. Ответ сервера
Изображение

В консоли браузера, в "afterValidate"
Изображение
Ответить