Валидация ActiveField через ajaxValidation ActiveForm?

Есть поля, которые подгружаються через ajax в созданную форму.
$('#add-child').click(function (e) {
        e.preventDefault();
        var number = $('.tourists .tourist').length,
            count_adults = $('.tourists .adult').length,
            count_children = $('.tourists .child').length;

        if(count_adults > count_children)
        {
            $.ajax({
                url: '/order/default/add-child',
                method: 'GET',
                data: { number: number },
                success: function (data) {
                    $('.tourists').append(data);
                    $('.selectpicker').selectpicker();
                    $('[data-toggle="tooltip"]').tooltip();
                    if(count_children + 1 >= count_adults) $('#add-child-block').hide();
                }
            });
        }
    });

Код контроллера:
public function actionAddChild($number)
    {
        return $this->renderPartial('_add-child', [
            'tourist' => new Tourist(),
            'number' => $number
        ]);
    }

Код view которая подгружаеться:
<?php
use yii\helpers\Html;
use kartik\icons\Icon;
use yii\widgets\ActiveField;
/* @var $tourist \common\models\Tourist */

?>
<?php
$sex = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']sex']);
$surname = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']surname']);
$name = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']name']);
$date_of_birth_text = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']date_of_birth_text']);
$passport_series = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']passport_series']);
$passport_number = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']passport_number']);
$passport_valid_until_text = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']passport_valid_until_text']);
$visa = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']visa']);
$child_documents = new ActiveField(['form' => 'w2', 'model' => $tourist, 'attribute' => '['. $number .']child_documents']);
?>
<div class="col-md-6">
    <div class="row small-gutters">
        <div class="col-md-5">
            <div class="form-group">
                <?= Html::label('Пол', '', ['class' => 'form-label']) ?>

                <?= $sex->dropDownList([
                    '1' => 'Мужской',
                    '2' => 'Женский'
                ], ['class' => 'form-control selectpicker'])->label(false) ?>
            </div>
        </div>
        <div class="col-md-7">
            <div class="form-group">
                <?= Html::label('Фамилия', '', ['class' => 'form-label']) ?>
                <?= $surname->textInput()->label(false) ?>
            </div>
        </div>
    </div>
</div>
<div class="col-md-6">
    <div class="row small-gutters">
        <div class="col-md-3">
            <div class="form-group">
                <?= Html::label('Имя', '', ['class' => 'form-label']) ?>

                <?= $name->textInput()->label(false) ?>
            </div>
        </div>
        <div class="col-md-5">
            <div class="form-group">
                <?= Html::label('Дата рождения', '', ['class' => 'form-label']) ?>

                <?= Html::a($date_of_birth_text->textInput(['placeholder' => 'дд.мм.гг'])->label(false), '#tourist-date-birth-'. $number, ['class' => 'date-single open-popup']) ?>
            </div>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                <?= Html::label('Вписан в паспорт', '', ['class' => 'form-label']) ?>

                <?= $child_documents->dropDownList([
                    1 => 'Да',
                    0 => 'Нет'
                ], ['class' => 'form-control selectpicker'])->label(false) ?>
            </div>
        </div>
    </div>
</div>

<div class="col-md-8">
    <div class="row small-gutters">
        <div class="col-md-8">
            <div class="form-group">
                <?= Html::label('Паспорт  (серия, номер)', '', ['class' => 'form-label']) ?>

                <div class="row small-gutters">
                    <div class="col col-sm-4">
                        <?= $passport_series->textInput(['placeholder' => 'AA'])->label(false) ?>
                    </div>
                    <div class="col col-sm-8">
                        <?= $passport_number->textInput(['placeholder' => '1234567890123'])->label(false) ?>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                <?= Html::label('Действителен до'. Html::a(Icon::show('info-circle'), '#', [
                        'class' => 'tooltip-link addition-info',
                        'data-toggle' => 'tooltip',
                        'data-placement' => 'bottom',
                        'data-html' => 'true',
                        'data-animation' => 'false',
                        'title' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa, perspiciatis?'
                    ]), '', [
                    'class' => 'form-label'
                ]) ?>

                <?= Html::a($passport_valid_until_text->textInput(['placeholder' => 'дд.мм.гг'])->label(false),
                    '#tourist-passport-valid-until-'. $number, ['class' => 'date-single open-popup']) ?>
            </div>
        </div>
    </div>
</div>
<div class="col-md-4">
    <div class="form-group">
        <?= Html::label('Виза' . Html::a(Icon::show('info-circle'), '#', [
                'class' => 'tooltip-link addition-info',
                'data-toggle' => 'tooltip',
                'data-placement' => 'bottom',
                'data-html' => 'true',
                'data-animation' => 'false',
                'title' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa, perspiciatis?'
            ]), '', [
            'class' => 'form-label'
        ]) ?>

        <?= $visa->dropDownList([
            0 => 'Ненужна',
            1 => 'Нужна'
        ], [
            'class' => 'form-control selectpicker'
        ])->label(false) ?>
    </div>
</div>

Валидация:
$client = new Client(['scenario' => 'hand_mode']);
        $passport = new Passport();
        $order = new Order(['scenario' => 'hand_mode']);
        $tourists = \common\models\Model::createMultiple(Tourist::className());

        if(Yii::$app->request->isAjax && $client->load(Yii::$app->request->post()) && $passport->load(Yii::$app->request->post()) && $order->load(Yii::$app->request->post()) && Model::loadMultiple($tourists, Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;

            $validate = [];
            $validate = array_merge(ActiveForm::validate($client), $validate);
            $validate = array_merge(ActiveForm::validate($order), $validate);
            $validate = array_merge(ActiveForm::validate($passport), $validate);
            $validate = array_merge(ActiveForm::validateMultiple($tourists), $validate);
            return $validate;
        }

Проблема состоит в том, что валидация етих полей проходит и возвращаются ошыбки, но они не отображаются
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
@karminski
Senior React.JS Developer
Так вы форму делайте, как сказано в мануале. Вы настолько усложнили себе жизнь, что плакать хочется.
www.yiiframework.com/doc-2.0/guide-input-forms.htm...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы