Задать вопрос
@shmelfrol
Системный администратор, веб-программист junior

Как в yii2 получить 2 параметра в поле?

Здравствуйте. подскажите пожалуйста как реализовать такую задачу:
имеется таблица полей - fields
id name
Имеется таблица форм - forms
id name
имеется таблица соответствия формы и поля - form_fields
id id_form id_field

и получается форма составляется из полей в соответствии с таблицей form_fields - например перебором -
если $forma->field->name = input выводим input

Для того чтобы получать с формы значения полей сделали модель Field_data
id_field data
получается в input передаем в $model= new Fiel_data(); а значения попадают в data
<?= $form->field($model, 'data') ?>
но как передать id_field???????????
нужен post типа Field_Data:[id_field, data]

делаем для того чтобы создавать формы автоматизировано, тип полей в базу добавим и на основе типа полей хотим собирать формы
Подскажите пожалуйста что надо доделать?
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Сложный Комментировать
Решения вопроса 1
grantur5707
@grantur5707
Full Stack Web Developer
Добавьте просто скрытое поле для передачи id_field, а в основное поле передавайте только данные:

<?php foreach ($fields as $field): ?>
    <?= Html::activeHiddenInput($model, "[$field->id]id_field", ['value' => $field->id]) ?>
    <?= $form->field($model, "[$field->id]data")->textInput(['value' => $model->data]) ?>
<?php endforeach; ?>


В результате вы получите примерно такую структуру post запроса:

Field_Data[1][id_field] = 1
Field_Data[1][data] = "значение поля 1"
Field_Data[2][id_field] = 2
Field_Data[2][data] = "значение поля 2"


А уже в контроллере обрабатывайте полученные поля как вам нужно:

if (Yii::$app->request->post('Field_Data')) {
    foreach (Yii::$app->request->post('Field_Data') as $fieldData) {
        $model = new FieldData();
        $model->id_field = $fieldData['id_field'];
        $model->data = $fieldData['data'];
        if ($model->validate()) {
            $model->save();
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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