nelauvetau
@nelauvetau

Как загружать данные новых полей в DynamicModel?

Необходимо в 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'] и не брать оттуда все, что пришло, руками?
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ответы на вопрос 1
Каким образом у вас именуются импуты для новых полей?
Для добавления новых адресов лучше использовать модельку от адресов, только вместо одной передавать массив моделек, таким образом вам не нужно будет использовать DynamicModel + все правила валидации подтянутся автоматически
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы