Как правильно добавлять поля в activeform с использованием ajax с их последующей валидацией

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

Как правильно добавлять поля в activeform с использованием ajax с их последующей валидацией

Сообщение Sergalas » 2018.01.12, 14:07

вот правила валидации в модели

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

public function rules()
    {
        return [
            [['user_id', 'city_id', 'payment',], 'required'],
            ['street', 'required', 'message' => 'Укажите название улицы.'],
            ...
        ];
    }

вот так я создаю форму

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

<div class="radio radio-tab">
        <label><input id="delivery1" type="radio" name="Order[delivery]" checked="" value="0"> Самовывоз </label>
</div>
 <div class="radio radio-tab">
             <label> <input id="delivery2" type="radio" name="Order[delivery]" value="1"> Доставка  </label>
</div>
<div class="tab-content">
           <div class="tab-pane delivery1 active">  ... </div>
           <div class="tab-pane delivery2"> </div>
           ...
</div>
<?php ActiveForm::end(); ?>

таким образом формирую ajax запрос

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

$('.radio-tab input').change(function () {
        var id = $(this).attr('id');
       if(id=='delivery1'){ ... })
       if(id=='delivery2')
           $.ajax({
            method: "POST",
            url: "/cart/delivery",
            data: true,
            success: function (data) {
               ...
                $('.radio-tabs .tab-pane.delivery2').html(data);
                $('.radio-tabs .tab-pane.delivery2').addClass('active');
            }
        })

так обрабатываю его в контролере

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

public function actionDelivery(){
        $model=new Order();
        return $this->renderAjax('_deliveryPiter',[
            'model'=>$model,
        ]);
    }

и вот так вывожу

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

...
        <div class="col-xs-12 col-sm-4">
            <div class="form-group field-order-street <?= $model->isAttributeRequired('street') ? 'required' : '' ?>">
                <?= Html::activeLabel($model,'street'); ?>
                <?= Html::activeInput('text',$model,'street',['class'=>'form-control']) ?>
            </div>
...
        </div>

и вроде все выводится но вопрос с валидацией на клиенте остался открытым. То есть если инпут не заполнен, не выводиться сообщение об ошибке, и не правильно заполненная форма отправляется на сервер где соответственно валидация не проходит. Вопрос как правильно добавлять поля в activeform с использованием ajax с их последующей валидацией.

Nex-Otaku
Сообщения: 563
Зарегистрирован: 2016.07.09, 21:07

Re: Как правильно добавлять поля в activeform с использованием ajax с их последующей валидацией

Сообщение Nex-Otaku » 2018.01.13, 13:20

Добавить поля в форму динамически? Это что-то странное.

Тебе будет проще на несколько форм разбить, либо выводить поля без аякса, сразу.

Аватара пользователя
Sergalas
Сообщения: 607
Зарегистрирован: 2015.10.15, 12:39

Re: Как правильно добавлять поля в activeform с использованием ajax с их последующей валидацией

Сообщение Sergalas » 2018.01.14, 21:52

Nex-Otaku писал(а):
2018.01.13, 13:20
Добавить поля в форму динамически? Это что-то странное.
Тебе будет проще на несколько форм разбить, либо выводить поля без аякса, сразу.
Сразу не получится потому, что там разные сценарии при разных доставках.

Nex-Otaku
Сообщения: 563
Зарегистрирован: 2016.07.09, 21:07

Re: Как правильно добавлять поля в activeform с использованием ajax с их последующей валидацией

Сообщение Nex-Otaku » 2018.01.15, 09:14

Для этого можно использовать параметр "when" валидатора.

Ответить