@KidsBout

Как добавить переменные в модель формы?

Есть база данных, в ней две таблицы:
1. Table1
2. Table2

В Table2 есть строки: id и Name

На сайте есть две страницы:
1. Главная страница
2. Страница Add

На странице Add есть форма, в которой есть input, с помощью этой формы я добавляю записи в table2.
С этой страницей всё ок.

Задача с главной страницей.
Тут есть форма, какая ее суть:
Я получаю из таблицы table2 первую запись, например там будет Name1
В форме создаю checkbox с именем Name1 и так по кругу, пока есть записи в таблице table2.
Вот код формы на Yii2
<?php $form = ActiveForm::begin(); ?>

    <?php foreach($allNameEx as $nameEx) : ?>

        <?= $form->field($model, $nameEx['name'])->checkbox() ?>

    <?php endforeach; ?>
 
    <div class="form-group">
        <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
    </div>

$model - это $model = new form();
$allNameEx - это массив который достает все записи Name из table2
Этот код работал бы, но при создании формы на странице, есть файл модели формы, в котором нужно добавлять переменные такие же, как и в input формы.
Если <?= $form->field($model, $nameEx['name'])->checkbox() ?> это будет, например
<?= $form->field($model, 'Name1')->checkbox() ?>, то в модели формы соответственно должна быть переменная public $Name1.
Вот и вопрос, как добавлять в модель формы эти переменные?
  • Вопрос задан
  • 819 просмотров
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если у Вас не 1 checkbox, а много, то наверное стоит использовать checkboxlist и передавать в него массив
$form->field($model, 'name')->checkboxList($model->getMyList());

в моделе:
public function getMyList(){
$arr = [];
return $arr;
}
Ответ написан
Decadal
@Decadal
Модель описывает структуру сущности как таковой. Если вы извлекаете все записи из БД, то формируете массив данных, описывающих одну и ту же сущность. Поэтому для обработки массива нужно создать другую модель, которая будет содержать в себе массив Names, и вот уже в него будут попадать ваши чекбоксы. Кстати, было бы проще вам помочь, если бы вы сказали, что делает форма на главной.

Во вьюхе, чтобы передать массив данных, нужно рендерить что-то вроде <input name="names[]" type="checkbox">
в цикле
как сделать это в стиле yii2, не знаю, не задавался вопросом (кстати, yii в теги)
upd:
Вот и вопрос, как добавлять в модель формы эти переменные?

ещё раз: эти переменные не требуют того, чтобы быть описаными в модели поимённо, поскольку смыславая нагрузка у них одна и та же - это значения поля "name".
Поэтому хранить их следует в другой модели, у которой есть поле names, обозначающее массив имён. Тогда ваш вопрос уйдёт в сторону от создания динамической модели с полями на основе данных, и упрётся только в рендер чекбоксов из массива данных и передачу массива в поле модели.
Ответ написан
@KidsBout Автор вопроса
Заработало,
<?= $form->field($model, 'nameEx[]')->checkboxList(form::checkFormData()); ?>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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