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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽