Subotinn
@Subotinn

Yii2 как расширить модель при включении модуля?

Добрый день, и сразу к делу.
Дано:
Yii2 + MongoDB

Есть модуль который должен подключаться динамически:
1) Модуль Departments (id + name)
Если модуль подключен, мы даем пользователю возможность добавлять и редактировать департаменты.
2) Если модуль departments активен, то нужно иметь возможность поместить в коллекцию User свойство DepartmentID.

Собственно вопрос, как правильно расширять(добавлять) функциональность департаментов для пользователей.

По базе:
Departments ( id + name )
Users ( id + name + departmentId )

Если выключить Departments
Users (id + name)

Пользователь сможет менять/видеть только поля id+name.
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 1
doniys_a
@doniys_a
Backend-разработчик (Php, node.js, python, ruby)
Стратегией можно.
По добавлению - все понятно. Когда модуль подключен, доступ к его контоллерам есть, когда нету - нету и доступа.

По поводу пользователей и связей.

Самый простой вариант
if (isset(Yii::app()->modules['moduleName'])) {...}
Но достаточно много мест будет таких, второй способ можно создать базовый класс стратегии, который будет на входе создавать один объект со всей необходимой логикой, либо файбрику объектов - так будет проще логику раскидать, во всех действиях использовать именно стратегию/фабрику, внутри которой уже будет подсовываться нужный класс по функционалу, если модуль доступен, один, если нет - другой.

В общем организовать нужно логику так, чтобы код не дублировался и оба случая не знали друг о друге.
Так же вполне подойдут (даже лучше, чем выше преложенный) DI-контейнера для решения данной задачи и дробление глобальной задачи на много мелких и реализация мелких, потом уже компоновка в инстурмент.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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