у вас каждый кабинет - модуль. создайте один модуль, где контрлллеры подмодулей будут наследоваться от одного контроллера, в котором будет вся логика.Vodazar писал(а):Вот! Это уже полезная подсказка куда можно копать, чтобы убрать дублирование, спасибо.- делаете standalone actions, чтобы не дублировать логику
Про модуль и BaseController не совсем понял, модуль чего? Контроллер зачем?
Как лучше организовать структуру сайта?
Re: Как лучше организовать структуру сайта?
Re: Как лучше организовать структуру сайта?
Ну смотрите, изначально я пошёл в направлении 1 роль = 1 кабинет = 1 модуль
Кабинет админа
modules/admin
modules/admin/controllers/Users (update, create, index)
modules/admin/controllers/Cards (update, create, index)
Кабинет оператора
modules/operator
modules/operator/controllers/Users (update, create, index)
modules/operator/controllers/Cards (update, create, index)
Но я столкнулся с такой проблемой, что при изменении 1 поля или какой-либо логики, надо лезти не только в модель например, но и искать по всем модулям контроллеры которые юзают эту модель. Так как модель User могут использовать 8 кабинетов, то код работы с пользователем дублируется 8 раз (8 контроллеров, 40+ представлений) и программист должен ещё знать где ещё нужно внести изменение, чтобы всё не рухнуло.
Соответственно есть желание организовать как-то более оптимально и реиспользуемо бизнес-логику и шаблоны. Но возникает ряд других вопросов, для ответов на которые я и прошу помощи у сообщества.
Кабинет админа
modules/admin
modules/admin/controllers/Users (update, create, index)
modules/admin/controllers/Cards (update, create, index)
Кабинет оператора
modules/operator
modules/operator/controllers/Users (update, create, index)
modules/operator/controllers/Cards (update, create, index)
Но я столкнулся с такой проблемой, что при изменении 1 поля или какой-либо логики, надо лезти не только в модель например, но и искать по всем модулям контроллеры которые юзают эту модель. Так как модель User могут использовать 8 кабинетов, то код работы с пользователем дублируется 8 раз (8 контроллеров, 40+ представлений) и программист должен ещё знать где ещё нужно внести изменение, чтобы всё не рухнуло.
Соответственно есть желание организовать как-то более оптимально и реиспользуемо бизнес-логику и шаблоны. Но возникает ряд других вопросов, для ответов на которые я и прошу помощи у сообщества.
Re: Как лучше организовать структуру сайта?
я вам и отвечаю на этот вопрос.Vodazar писал(а):Ну смотрите, изначально я пошёл в направлении 1 роль = 1 кабинет = 1 модуль
Кабинет админа
modules/admin
modules/admin/controllers/Users (update, create, index)
modules/admin/controllers/Cards (update, create, index)
Кабинет оператора
modules/operator
modules/operator/controllers/Users (update, create, index)
modules/operator/controllers/Cards (update, create, index)
Но я столкнулся с такой проблемой, что при изменении 1 поля или какой-либо логики, надо лезти не только в модель например, но и искать по всем модулям контроллеры которые юзают эту модель. Так как модель User могут использовать 8 кабинетов, то код работы с пользователем дублируется 8 раз (8 контроллеров, 40+ представлений) и программист должен ещё знать где ещё нужно внести изменение, чтобы всё не рухнуло.
Соответственно есть желание организовать как-то более оптимально и реиспользуемо бизнес-логику и шаблоны. Но возникает ряд других вопросов, для ответов на которые я и прошу помощи у сообщества.
Re: Как лучше организовать структуру сайта?
С вами разговаривать, примерно как в фильме:
— Каков ответ на Главный Вопрос Жизни, Вселенной и Всего-всего?
— 42
— Что 42?
— Мой ответ 42!
— Каков ответ на Главный Вопрос Жизни, Вселенной и Всего-всего?
— 42
— Что 42?
— Мой ответ 42!
Re: Как лучше организовать структуру сайта?
это вы так видите. я вижу так:Vodazar писал(а):С вами разговаривать, примерно как в фильме:
— Каков ответ на Главный Вопрос Жизни, Вселенной и Всего-всего?
— 42
— Что 42?
— Мой ответ 42!
- мне нужно решить проблему дублирования логики.
- вот вам два решения, такое и такое.
- но мне нужно решить проблему дублирования логики.
- я вам на этот вопрос и ответил.
Re: Как лучше организовать структуру сайта?
Это скорее похоже на
- Мне нужно посадить яблоню, которая будет хорошо расти и выдержит -20*С зимой. Как лучше вырыть для этого яму? Чем побрызгать?
- "Антоновка" и Лопата вам помогут
Впрочем, мы отвлеклись на филосовствование. За идею с экшенами я уже поблагодарил
Но, надеюсь, кто-нибудь ещё предложит более конкретные вещи / схемы / идеи.
- Мне нужно посадить яблоню, которая будет хорошо расти и выдержит -20*С зимой. Как лучше вырыть для этого яму? Чем побрызгать?
- "Антоновка" и Лопата вам помогут
Впрочем, мы отвлеклись на филосовствование. За идею с экшенами я уже поблагодарил
Но, надеюсь, кто-нибудь ещё предложит более конкретные вещи / схемы / идеи.
Re: Как лучше организовать структуру сайта?
То есть вы не поняли, что вам написали, а, значит, это ответ 42?) не поняли - переспросите.Vodazar писал(а):Это скорее похоже на
- Мне нужно посадить яблоню, которая будет хорошо расти и выдержит -20*С зимой. Как лучше вырыть для этого яму? Чем побрызгать?
- "Антоновка" и Лопата вам помогут
Впрочем, мы отвлеклись на филосовствование. За идею с экшенами я уже поблагодарил
Но, надеюсь, кто-нибудь ещё предложит более конкретные вещи / схемы / идеи.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Как лучше организовать структуру сайта?
Если у вас все завязано на кабинете - тогда посмотрите на это с другой стороны.
Похожее делал в CI - как сделать в Yii? не знаю. Поэтому идея
Похожее делал в CI - как сделать в Yii? не знаю. Поэтому идея
- Сделайте один кабинет на всех со всеми полями (например поля name, email, pass)
- Относительно этих полей раздайте права доступа
Код: Выделить всё
return [ 'cabinet' => [ 'name' => ['admin', 'editor'], 'email' => ['admin', 'editor'], 'pass' => ['admin'] ], 'profile' => [ 'name' => ['admin', 'editor', 'user'], 'email' => ['admin', 'editor', 'user'], 'pass' => ['admin', 'author'] ] ];
- Открывайте кабинет, проверяйте доступность полей для определенной роли. Не доступно - скрываете.
- При валидации также проверяете доступность полей для записи.
Re: Как лучше организовать структуру сайта?
Лично мне advanced тоже не нравится, я не вижу в нем каких-либо преимуществ перед модулями в basic.
Касательно вашего вопроса. Все эти проблемы решаются классическим ООП, Уии тут не при чем, разве что может накладывать немного своих ограничений.
Я бы выделил общий модуль (то, что в advanced - common) в нем бы разместил все базовые модели, компоненты и т.д.
Все кабинеты реализовал бы в виде отдельных модулей (как вы и сделали, судя по всему).
Если, например, модулю нужна какая-то специфичная функциональность, скажем в модели User - делаем наследника:
Для того чтобы добавление новых полей не было проблемой - старайтесь вообще не использовать прямое обращение к свойствам модели (например) ни во вьюхах, ни в контролерах.
Т.е. конструкций типа:
Не должно быть ни в контроллерах, ни во вьюхах, инкапсулируйте все в методы ($user->isActive(), например).
Как-то так.
Касательно вашего вопроса. Все эти проблемы решаются классическим ООП, Уии тут не при чем, разве что может накладывать немного своих ограничений.
Я бы выделил общий модуль (то, что в advanced - common) в нем бы разместил все базовые модели, компоненты и т.д.
Все кабинеты реализовал бы в виде отдельных модулей (как вы и сделали, судя по всему).
Если, например, модулю нужна какая-то специфичная функциональность, скажем в модели User - делаем наследника:
Код: Выделить всё
namespace operator/models;
Class User extends /common/user
{
}
Т.е. конструкций типа:
Код: Выделить всё
if($user->status === User::STATUS_ACTIVE) {
}
Как-то так.