Как лучше организовать структуру сайта?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как лучше организовать структуру сайта?

Сообщение zelenin »

Vodazar писал(а):
- делаете standalone actions, чтобы не дублировать логику
Вот! Это уже полезная подсказка куда можно копать, чтобы убрать дублирование, спасибо.

Про модуль и BaseController не совсем понял, модуль чего? Контроллер зачем?
у вас каждый кабинет - модуль. создайте один модуль, где контрлллеры подмодулей будут наследоваться от одного контроллера, в котором будет вся логика.
Аватара пользователя
Vodazar
Сообщения: 77
Зарегистрирован: 2014.02.25, 13:05

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+ представлений) и программист должен ещё знать где ещё нужно внести изменение, чтобы всё не рухнуло.

Соответственно есть желание организовать как-то более оптимально и реиспользуемо бизнес-логику и шаблоны. Но возникает ряд других вопросов, для ответов на которые я и прошу помощи у сообщества.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как лучше организовать структуру сайта?

Сообщение zelenin »

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+ представлений) и программист должен ещё знать где ещё нужно внести изменение, чтобы всё не рухнуло.

Соответственно есть желание организовать как-то более оптимально и реиспользуемо бизнес-логику и шаблоны. Но возникает ряд других вопросов, для ответов на которые я и прошу помощи у сообщества.
я вам и отвечаю на этот вопрос.
Аватара пользователя
Vodazar
Сообщения: 77
Зарегистрирован: 2014.02.25, 13:05

Re: Как лучше организовать структуру сайта?

Сообщение Vodazar »

С вами разговаривать, примерно как в фильме:
— Каков ответ на Главный Вопрос Жизни, Вселенной и Всего-всего?
— 42
— Что 42?
— Мой ответ 42!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как лучше организовать структуру сайта?

Сообщение zelenin »

Vodazar писал(а):С вами разговаривать, примерно как в фильме:
— Каков ответ на Главный Вопрос Жизни, Вселенной и Всего-всего?
— 42
— Что 42?
— Мой ответ 42!
это вы так видите. я вижу так:

- мне нужно решить проблему дублирования логики.
- вот вам два решения, такое и такое.
- но мне нужно решить проблему дублирования логики.
- я вам на этот вопрос и ответил.
Аватара пользователя
Vodazar
Сообщения: 77
Зарегистрирован: 2014.02.25, 13:05

Re: Как лучше организовать структуру сайта?

Сообщение Vodazar »

Это скорее похоже на
- Мне нужно посадить яблоню, которая будет хорошо расти и выдержит -20*С зимой. Как лучше вырыть для этого яму? Чем побрызгать?
- "Антоновка" и Лопата вам помогут

Впрочем, мы отвлеклись на филосовствование. За идею с экшенами я уже поблагодарил :)

Но, надеюсь, кто-нибудь ещё предложит более конкретные вещи / схемы / идеи.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как лучше организовать структуру сайта?

Сообщение zelenin »

Vodazar писал(а):Это скорее похоже на
- Мне нужно посадить яблоню, которая будет хорошо расти и выдержит -20*С зимой. Как лучше вырыть для этого яму? Чем побрызгать?
- "Антоновка" и Лопата вам помогут

Впрочем, мы отвлеклись на филосовствование. За идею с экшенами я уже поблагодарил :)

Но, надеюсь, кто-нибудь ещё предложит более конкретные вещи / схемы / идеи.
То есть вы не поняли, что вам написали, а, значит, это ответ 42?) не поняли - переспросите.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Как лучше организовать структуру сайта?

Сообщение Loveorigami »

Если у вас все завязано на кабинете - тогда посмотрите на это с другой стороны.
Похожее делал в CI - как сделать в Yii? не знаю. Поэтому идея ;)
  1. Сделайте один кабинет на всех со всеми полями (например поля name, email, pass)
  2. Относительно этих полей раздайте права доступа

    Код: Выделить всё

    return [
        'cabinet' => [
            'name' => ['admin', 'editor'],
            'email' => ['admin', 'editor'],
            'pass' => ['admin']
        ],   
        'profile' => [
            'name' => ['admin', 'editor', 'user'],
            'email' => ['admin', 'editor', 'user'],
            'pass' => ['admin', 'author']
        ]
    ];
    
  3. Открывайте кабинет, проверяйте доступность полей для определенной роли. Не доступно - скрываете.
  4. При валидации также проверяете доступность полей для записи.
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Как лучше организовать структуру сайта?

Сообщение xoma »

Лично мне advanced тоже не нравится, я не вижу в нем каких-либо преимуществ перед модулями в basic.
Касательно вашего вопроса. Все эти проблемы решаются классическим ООП, Уии тут не при чем, разве что может накладывать немного своих ограничений.
Я бы выделил общий модуль (то, что в advanced - common) в нем бы разместил все базовые модели, компоненты и т.д.
Все кабинеты реализовал бы в виде отдельных модулей (как вы и сделали, судя по всему).
Если, например, модулю нужна какая-то специфичная функциональность, скажем в модели User - делаем наследника:

Код: Выделить всё

namespace operator/models;

Class User extends /common/user
{
} 
Для того чтобы добавление новых полей не было проблемой - старайтесь вообще не использовать прямое обращение к свойствам модели (например) ни во вьюхах, ни в контролерах.
Т.е. конструкций типа:

Код: Выделить всё

if($user->status === User::STATUS_ACTIVE) {
} 
Не должно быть ни в контроллерах, ни во вьюхах, инкапсулируйте все в методы ($user->isActive(), например).
Как-то так.
Ответить