изменение сценария формы и pjax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vv-off
Сообщения: 28
Зарегистрирован: 2018.01.12, 11:49

изменение сценария формы и pjax

Сообщение vv-off » 2019.11.05, 11:20

Здравствуйте.
Подскажите как изменить сценарий валидации при обновлении части полей формы через pjax?
Т.е. есть разный набор полей в зависимости от условия и эти наборы полей рендерятся через $this->render и сам $this->render обернут в pjax чтобы не удалить данные в одинаковых полях для всей формы.
Пытаюсь установить сценарии через setScenario() для модели в самом action куда отправляется форма при условии, что получен pjax запрос,
но сценарий не меняется.

yiiliveext
Сообщения: 534
Зарегистрирован: 2019.08.13, 01:49

Re: изменение сценария формы и pjax

Сообщение yiiliveext » 2019.11.05, 12:53

Отключите клиентскую js-валидацию и вместо нее используйте ajax-валидацию

vv-off
Сообщения: 28
Зарегистрирован: 2018.01.12, 11:49

Re: изменение сценария формы и pjax

Сообщение vv-off » 2019.11.05, 13:57

я имею ввиду, что у меня есть форма вида:
view

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

<?php $form = ActiveForm::begin(); ?>
/* Поле присутствует всегда */
<?= $form->field($formModel, 'static_field_one'); ?>

/* обертка Pajax для полей, которые выводятся по условию */
<?php Pjax::begin(['id' => 'dynamic-fields-wrapper']); ?>
    <a href="<?= Url::to(['/mcontroller', 'type' => 0]) ?>">Тип 1</a>
    <a href="<?= Url::to(['/mcontroller', 'type' => 1]) ?>">Тип 2</a>
	
	/* в зависимости от содержимого переменной подгружается соответствующая view со своим набором полей */
    <?= $this->render($dynamicFieldsRender, ['formModel' => $formModel, 'form' => $form]); ?>
<?php Pjax::end(); ?>
<?= Html::submitButton('Go', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?>
в контроллере, например я пытаюсь менять сценарии модели в зависимости от подгружаемой view

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

<?php 
$formModel = new Form();
$type = Yii::$app->request->get('type');
if ($type == 0) {
	$dynamicFieldsRender = '_dynamicFieldsOne';
    $formModel->scenario = Form::SCENARIO_FIELDS_ONE;
}
if ($type == 1) {
	$dynamicFieldsRender = '_dynamicFieldsTwo';
    $formModel->scenario = Form::SCENARIO_FIELDS_TWO;
}
?>
и т.д.

При просто загрузке без Pjax: /mcontroller?type=0 или /mcontroller?type=1 и т.д. сценарий переключается и всё отлично валидируется
При переходе по ссылкам:

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

<a href="<?= Url::to(['/mcontroller', 'type' => 0]) ?>">Тип 1</a>
<a href="<?= Url::to(['/mcontroller', 'type' => 1]) ?>">Тип 2</a>
срабатывает Pjax и сценарий не переключается

yiiliveext
Сообщения: 534
Зарегистрирован: 2019.08.13, 01:49

Re: изменение сценария формы и pjax

Сообщение yiiliveext » 2019.11.05, 16:25

Что конкретно у вас не переключается?
Переменную $formModel нельзя передать через html

vv-off
Сообщения: 28
Зарегистрирован: 2018.01.12, 11:49

Re: изменение сценария формы и pjax

Сообщение vv-off » 2019.11.06, 08:42

Сценарии переключаются. Как я понял нужно включить валидацию для полей которые подгружаются через pjax.
Как правильнее сделать, через beforeValidate?

yiiliveext
Сообщения: 534
Зарегистрирован: 2019.08.13, 01:49

Re: изменение сценария формы и pjax

Сообщение yiiliveext » 2019.11.06, 20:10

vv-off писал(а):
2019.11.06, 08:42
Сценарии переключаются. Как я понял нужно включить валидацию для полей которые подгружаются через pjax.
Как правильнее сделать, через beforeValidate?
Добавить на клиенте
https://github.com/samdark/yii2-cookboo ... form-js.md

Ответить