Это первое решение, которое пришло мне в голову. Поправьте, если в чем то ошибся.
Данный код не проверялся на работоспособность, это только концепция.
Controller
class ControllerForm extends \yii\web\Controller
{
public function actionCreate()
{
$post = Yii::$app->request->post();
$step = Yii::$app->request->post('step', 'step1');
$model = ModelForm::model($step);
$model->attributes = $post;
if ($model->load($post) && $model->validate()) {
if ($step === 'stepLast' && $model->save()) {
return $this->redirect(Url::toRoute(['index']));
}
}
return $this->render('form', ['model' => $model]);
}
}
Model
class ModelForm extends ActiveRecord
{
public function rules()
{
return [
[['field1', 'field2'], 'required', 'on' => 'step1'],
[['field3'], 'required', 'on' => 'step2'],
[['field1', 'field2', 'field3'], 'safe', 'on' => ['step1', 'step2', 'stepLast']]
];
}
}
View
$form = ActiveForm::begin([
'layout' => 'horizontal',
]);
echo $form->field($model, 'name', ['options' => ['class' => 'name '.$model->scenario]]);
ActiveForm::end();
Css
.name.step1 {
display: block;
}
.name.step2 {
display: none;
}
UP1
В документации Yii2 есть информация о использовании нескольких моделей на форме
www.yiiframework.com/doc-2.0/guide-input-multiple-...