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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽