не отображаются сообщения ajax-валидации в active form

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Rodion_19
Сообщения: 12
Зарегистрирован: 2017.06.29, 21:26

не отображаются сообщения ajax-валидации в active form

Сообщение Rodion_19 »

Всем привет, нужно валидировать данные через ajax
в контроллере обрабатываю ajax-запрос на валидацию

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

       
        $modelRules = new Rules();
        if (Yii::$app->request->isAjax && $modelRules->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;

            $modelRules->userId = (integer)Yii::$app->user->id;

            if($modelRules->appliedTo == Rules::APPLIED_TO_SEARCH_TERMS) {
                $modelRules->setScenario(Rules::APPLIED_TO_SEARCH_TERMS);
            }

            return ActiveForm::validate($modelRules);
        }
во view в ActiveFrom установил флаг
'enableAjaxValidation' => true
и соответственно в шаблоне поля указал {error}

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

echo $form->field($modelRules, 'ruleName', [
              'template' => '{label}<div class="form-controls">{input}{error}</div>'])
        ->label(Yii::t('api', 'Rule Name'), ['class' => 'form-label'])
        ->input('text', ['placeholder' => Yii::t('api', 'Enter rule name')])
         ->error(['class' => 'form-error-message text-danger']);
при сабмите запрос отправляется, и форма не проходит валидацию, возвращаются ошибки, но не выводятся в error-блоках полей, но при это если где-то воткнуть $form->errorSummary() - они выводятся.
Заранее спасибо !
AndyP
Сообщения: 5
Зарегистрирован: 2017.09.20, 18:01

Re: не отображаются сообщения ajax-валидации в active form

Сообщение AndyP »

Посмотрите в моем вопросе, вариант от Dominus мне помог

http://www.yiiframework.ru/forum/viewtopic.php?t=45110
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: не отображаются сообщения ajax-валидации в active form

Сообщение NEIRON »

Я посмотрел решение от @Dominus в теме: http://www.yiiframework.ru/forum/viewtopic.php?t=45110
Но там тема уже закрыта, поэтому пишу тут

в Моделе одно из rules

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

...
[
   ['field1','field2'],
      function () {
         ... 	
         $this->addError('field2', "Текст ошибки");
      }
]...
Контролер

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

  if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
            return ActiveForm::validate($model);
        }
В форме стоит ajax-валидация
По правилу выше оно должно проверять 2 поля и во второе поле выводить ошибку в случае каких-то условия
Вот через Network я вижу, что ajax-запросы уходят, и даже приходит ошибка для field2, но поле ошибочным не подсвечивается, если например я ввожу данные в первое поле, а как только фокус получает field2 и теряет фокус, так же срабатывает ajax-валидация, и тогда уже ошибка показывается около field2
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: не отображаются сообщения ajax-валидации в active form

Сообщение yiiliveext »

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

<input type="text" id="field1" class="form-control is-valid" name="Model[field1]" 
    onblur="$(this).closest('form').yiiActiveForm('validateAttribute', 'field2');">
<input type="text" id="field2" class="form-control is-valid" name="Model[field2]>
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: не отображаются сообщения ajax-валидации в active form

Сообщение NEIRON »

yiiliveext писал(а): 2020.02.01, 11:07
Спасибо, вот так помогло

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

<?= $form->field($model, 'family_count')->textInput([
       'data-toggle'=>"tooltip",
       'title'=>$model->attributeDescription()['field2'],
       'onblur'=>"$(this).closest('form').yiiActiveForm('validateAttribute', "field2"');"
])?>
Ответить