Exebeche
@Exebeche
Осваиваю программирование

Как в yii2 реализовать форму с полями из БД?

Нужно реализовать форму с созданием/редактированием/удалением полей из админки.
Имеются таблицы:
Profession, Field, Type, ProfessionField

View:
<?php foreach ($professions as $index => $profession): ?>
	<li>
		<a href="">
			<?= $profession->title ?>
		</a>
		<?php $form = ActiveForm::begin(); ?>
		<?php foreach ($profession->fields as $key => $field): ?>
			<?php $type = $field->type->code ?>
			<?= $form->field($field, "[$key]name")->label($field->title) ?>
		<?php endforeach ?>
		<?php ActiveForm::end(); ?>
	</li>
<?php endforeach ?>


Все получается неплохо и есть несколько способов, но все они не дают возможность создать в форме поля select, textarea...
$type выдает нужные данные, но при попытке реализовать
<?= $form->field($field, "[$key]name")->$type->label($field->title) ?>

выдает ошибку.
Getting unknown property: yii\widgets\ActiveField::textInput()


Пробовал еще так:
<?php foreach ($professions as $index => $profession): ?>
	<li>
		<a href="">
			<?= $profession->title ?>
		</a>
		<?php $form = ActiveForm::begin(); ?>
		<?php foreach ($profession->fields as $key => $field): ?>
			<?= $form->field($field, "[$key]name")->begin() ?>
			<input type="<?= $field->type->code ?>" placeholder="<?= $field->placeholder ?>" name="<?= $field->title ?>" class="form-control">
			<?= $form->field($field, "[$key]name")->end() ?>
		<?php endforeach ?>
		<?php ActiveForm::end(); ?>
	</li>
<?php endforeach ?>

Но все равно ограничивается input и не позволяет задать textArea и пр.

В голову приходит использовать if проверяя все поля через него и подставляя нужный код всей строки
<?= $form->field($field, "[$key]name")->textInput()->label($field->title) ?>
или
<?= $form->field($field, "[$key]name")->textArea()->label($field->title) ?>
или
<?= $form->field($field, "[$key]name")->dropDownList()->label($field->title) ?>

но, кажется, получится не кошерно.
Может быть есть какие-то правильные варианты или готовые решения?
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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