vikoff
@vikoff
Web-разработчик

Yii2: Как использовать формы для составных полей?

Формы в Yii2 интегрированы с моделями, т.е. ActiveRecord модель по сути выступает и в роли формы. Концепция вполне интересная, но как ее правильно использовать когда одно поле в БД должно конфигурироваться несколькими инпутами (чекбоксами) ? В моем примере в таблице users есть колонка role которая содержит все роли как битовые маски. К примеру, если у юзера есть роль admin, значит у него заполнен соответствующий бит. Во view мне кажется должно быть что-то такое:
<fieldset>
    <legend>Role</legend>
    <?= $form->field($user, 'role_employee')->checkbox(['label' => 'Employee']); ?>
    <?= $form->field($user, 'role_pm')->checkbox(['label' => 'Project Manager']); ?>
    <?= $form->field($user, 'role_admin')->checkbox(['label' => 'Admin']); ?>
</fieldset>

Но в модели role это одно поле, потому что так оно хранится в БД. Я думал использовать отдельный класс формы, т.е. не модель User, а какой-нибудь class AdminEditUser, но это не слишком удобно укладывается на архитектуру yii. В частности одно из полей при редактировании использует валидатор unique, который не захотел работать из коробки при использовании отдельного класса формы, не связанного с конкретным экземпляром модели User.

Подскажите как лучше решать подобную задачу на Yii2, а то не хочется городить огород :)
  • Вопрос задан
  • 598 просмотров
Пригласить эксперта
Ответы на вопрос 1
@matperez
Если набор ролей ограничен, проще всего завести обычные публичные свойства у модели "User". При создании инстанса заполнять их поля БД в методе afterFind, а при сохранении наоборот формировать поле для БД из этих полей в каком-нибудь beforeSave. Соответственноб сама вьюха будет вот точно такая как вам хочется.
Ответ написан
Ваш ответ на вопрос

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

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