Здравствуйте.
Подскажите как изменить сценарий валидации при обновлении части полей формы через pjax?
Т.е. есть разный набор полей в зависимости от условия и эти наборы полей рендерятся через $this->render и сам $this->render обернут в pjax чтобы не удалить данные в одинаковых полях для всей формы.
Пытаюсь установить сценарии через setScenario() для модели в самом action куда отправляется форма при условии, что получен pjax запрос,
но сценарий не меняется.
изменение сценария формы и pjax
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: изменение сценария формы и pjax
Отключите клиентскую js-валидацию и вместо нее используйте ajax-валидацию
Re: изменение сценария формы и pjax
я имею ввиду, что у меня есть форма вида:
view
в контроллере, например я пытаюсь менять сценарии модели в зависимости от подгружаемой view
и т.д.
При просто загрузке без Pjax: /mcontroller?type=0 или /mcontroller?type=1 и т.д. сценарий переключается и всё отлично валидируется
При переходе по ссылкам:
срабатывает Pjax и сценарий не переключается
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(); ?>
Код: Выделить всё
<?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>
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: изменение сценария формы и pjax
Что конкретно у вас не переключается?
Переменную $formModel нельзя передать через html
Переменную $formModel нельзя передать через html
Re: изменение сценария формы и pjax
Сценарии переключаются. Как я понял нужно включить валидацию для полей которые подгружаются через pjax.
Как правильнее сделать, через beforeValidate?
Как правильнее сделать, через beforeValidate?
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49