Необходимо в yii2 сделать форму, в которую можно добавлять новые поля. Например, пользователь заполнил один инпут с адресом и может нажать на плюсик, чтобы создать и заполнить инпут для второго адреса. И так n раз - сколько пользователь захочет.
Насколько я понимаю, в yii2 для этого есть DynamicModel, которая позволяет изменить форму после ее отображения пользователю. В документации нашла, как добавлять новые поля на фронте -
https://www.yiiframework.com/doc/guide/2.0/en/inpu...
Но вот никак не могу понять, а как мне потом загружать эти новые, созданные на фронте, поля в модель?
Документация предлагает такое использование динамической модели:
// in controller
public function actionForm()
{
$model = new \yii\base\DynamicModel([
'name', 'email', 'address'
]);
$model->addRule(['name','email'], 'required')
->addRule(['email'], 'email')
->addRule('address', 'string',['max'=>32]);
if($model->load(Yii::$app->request->post())){
// do somenthing with model
return $this->redirect(['view']);
}
return $this->render('form', ['model'=>$model]);
}
Но как решить проблему с новыми полями на стороне бэка - как после сабмита правильно передать в конструкт динамической модели новые поля, которые уже не я задала, а пользователь?
То есть, если до сабмита я могу сама передать поля
$model = new \yii\base\DynamicModel([
'name', 'email', 'address_0'
]);
То после сабмита надо передавать еще новые поля адресов
$model = new \yii\base\DynamicModel([
'name', 'email', 'address_0', 'address_1', 'address_2', 'address_3',
]);
Вот вопрос, откуда это правильно получить?
То есть, я могу добавить на фронте, но не могу найти, как правильно перехватить потом это в контролере, если только не залезать в $_POST['MyForm'] и не брать оттуда все, что пришло, руками?