Добавление модели в несколько этапов
-
- Сообщения: 12
- Зарегистрирован: 2015.01.26, 16:50
Добавление модели в несколько этапов
Привет. Как можно реализовать добавление модели в несколько этапов. Визард. На первом шаге добавлем 3 поля, проверяем, все ок. Далее еще 3 и так 4 шага.
Нужно еще иметь возможность возвращаться. Как это можно реализовать?
Нужно еще иметь возможность возвращаться. Как это можно реализовать?
Re: Добавление модели в несколько этапов
как обычно, а в чем проблема-то?
-
- Сообщения: 12
- Зарегистрирован: 2015.01.26, 16:50
Re: Добавление модели в несколько этапов
а как обычно? я не понимаю. Есть пример. Мы добавляем объект где 3 поля обязательные. Остальные как есть.
Как напримере:
https://github.com/juratitov/yii2-blog/ ... /login.php
https://github.com/juratitov/yii2-blog/ ... inForm.php
как сделать чтобы добавить имя, потом след шаг пароль с валидацией
Как напримере:
https://github.com/juratitov/yii2-blog/ ... /login.php
https://github.com/juratitov/yii2-blog/ ... inForm.php
как сделать чтобы добавить имя, потом след шаг пароль с валидацией
-
- Сообщения: 12
- Зарегистрирован: 2015.01.26, 16:50
Re: Добавление модели в несколько этапов
как мне разделить для каждого шага - своя форма со своей валидацией
Re: Добавление модели в несколько этапов
Сценарии пробовали использовать?
-
- Сообщения: 12
- Зарегистрирован: 2015.01.26, 16:50
Re: Добавление модели в несколько этапов
Сценариями еще не пользовался. Есть более менее похожий пример как у меня?
Re: Добавление модели в несколько этапов
В нужной модельке пишем
Это сценарий, в нем указано, какие поля валидировать. Если валидировать нужно, но массовое присвоение допустить нельзя, то указываем так "!password"
Использование сценария примерно так:
То что вы указали в правилах валидации уже сценарий-"по умолчанию". Но там-же можно задать и разграничения валидаций по сценариям, например обязательное поле только в данном сценарии
Это в rules нужно указать. Надеюсь смогла объяснить
Код: Выделить всё
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['registration'] = ['login', 'username'];
return $scenarios;
}
Использование сценария примерно так:
Код: Выделить всё
$user = new User();
$user->scenario = 'registration';
Код: Выделить всё
['username', 'required', 'on' => ['registration']],
-
- Сообщения: 12
- Зарегистрирован: 2015.01.26, 16:50
Re: Добавление модели в несколько этапов
Все равно не получается .....
сама view
Как нужно это реализовать?
Мои сценарии:
Шаг 1 - все ок, валидируется и отправляется
Шаг 2 - ничего не валидируется, и на сабмит опять бросает на step1
Код: Выделить всё
$step = Yii::$app->getRequest()->getQueryParam('step');
if ($step != '1' && $step != '2' && $step != '3' && $step != '4')
$step = '1';
$model = Yii::$app->request->post('model');
if (empty($model))
$model = new MyModel();
$model->scenario = 'step'.$step;
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$step++;
if ($step > 4) {
}
}
return $this->render('view', [
'step' => $step,
'model' => $model
]);
Код: Выделить всё
<?php if ($step == 1): ?>
<?php $form = ActiveForm::begin(['id' => 'my-form']); ?>
<?= $form->field($model, 'field1') ?>
<div class="form-group">
<input type='hidden' name='step' value='<?= $step ?>'/>
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary', 'name' => 'save-button']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php endif; ?>
<?php if ($step == 2): ?>
<?php $form = ActiveForm::begin(['id' => 'my-form']); ?>
<?= $form->field($model, 'field2') ?>
<div class="form-group">
<input type='hidden' name='step' value='<?= $step ?>'/>
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-primary', 'name' => 'save-button']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php endif; ?>
Мои сценарии:
Код: Выделить всё
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['step1'] = ['а1', 'a2'];
$scenarios['step2'] = ['a3'];
$scenarios['step3'] = ['a4', 'a5'];
$scenarios['step4'] = ['a6'];
return $scenarios;
}
Шаг 2 - ничего не валидируется, и на сабмит опять бросает на step1