Нужно реализовать форму с созданием/редактированием/удалением полей из админки.
Имеются таблицы:
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) ?>
но, кажется, получится не кошерно.
Может быть есть какие-то правильные варианты или готовые решения?