Структура универсального модуля для basic и advanced - НА ОБСУЖДЕНИЕ

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Структура универсального модуля для basic и advanced - НА ОБСУЖДЕНИЕ

Сообщение maleks »

Приветствую.
По мотивам данной темы, и базируясь от структуры папок 3-его варианта(*), решил создать шаблон универсального модуля.
Задачи данного модуля:
- быть самодостаточным, законченным, все в одном месте
---- иметь понятную предсказуемую структуру папок
---- предоставлять функционал фронтенда и бекенда
- соответственно его одной папкой легко перенести в новое приложение или установить из расширений
- модуль должен легко подключаться как к advanced, так и к basic шаблону
- модуль в одном конфиге должен подключаться один раз, т.е. не два раза как в (*)
- функционал глобальной защиты доступа всех бекенд контроллеров
- т.е. получится свои наработки не разбрасывать как придется, а все складывать по таким модулям, надо в новом проекте чуть другой функционал, просто копируем, меняем неймспейсы и переписываем(это когда свой код, а не расширения).
- такой модуль может быть сгенерирован из соответствующего gii шаблона, ни от каких расширений он не зависит.
--- (ИЗМЕНЕНО) Т.к. в модуле уже прилично функционала, сделал вынос общего функционала в родительский модуль. Новые нужно наследовать и они получаются практически пустые (кроме карт контроллеров).

Итак сразу примеры:
A) Вот сам модуль example, подключенный к advanced шаблону
B) А вот уже пример сборки basic приложения, там этот модуль и еще один его собрат omega (у которого есть миграция, если кто будет щупать вживую)

Теперь по структуре модуля.
Он ожидает следующую структуру:
- Module
--- console
------ commands
------ migrations
--- ui
------ controllers
--------- backend
------------ AdminDefaultController <--- пример контроллера бека
--------- frontend
------------ DefaultController <--- пример контроллера фронта
------ views
--------- backend
------------ admin-default
--------- frontend
------------ default
Понятно что все остальное,формы, виджеты, когда имеются, тоже подобным образом размещаются. Остальное, модели, сервисы - по желанию, но "в духе".

На что обращаем внимание:
1) Контроллеры
- им требуется находиться именно в указанных подпапках модуля
- они указываются на уровне модуля через Карту Контроллеров.
--- Это сделано чтобы контроллеры не искались автоматически. В advanced на фронте нам нужны только фронт контроллеры модуля, тоже для бэка, а на basic шаблоне могут понадобиться и те и те контроллеры (поэтому и не было возможности controllerNamespace переопределять(кроме консольного приложения))
- Админским контроллерам не требуется наследоваться от какого то общего контроллера, но
их удобно начинать именовать с Admin чтобы потом в urlManager единообразно настроить урлы на начинающиеся с admin/ (см. пример B))

2) Модуль
2.0) Общий смысл:
- Такие модули не предполагается вкладывать один в другой, они указываются на первом уровне модулей, подключается один раз
--- Соответственно урлы простые и есть возможность подключения/отключения таких модулей в CMS-ках
- настраивать в конфиге приходится каждый из них, Пример B) показывает как это делается.
- Карту контроллеров модуля надо самому определять в его initControllerMap()
--- (ИЗМЕНЕНО) Методы не надо переопределять, карты фронт и бек контроллеров настраиваются как св-ва модуля

2.1) Ему в конфиге устанавливается:
2.1.0) $frontendControllers, $backendControllers - карты контроллеров
2.1.1) Режим, 'backend', 'frontend', 'backend and frontend', определяет какие контроллеры подключаются в карту контроллеров
2.1.2) Шаблон админки - $backendLayout - нужен только на basic шаблоне для админских страниц
2.1.3) $backendControllerConfig - конфиг который будет навешиваться на все бекенд контроллеры. Пример.
Нужен главным образом например чтобы бекенд контроллеры всех таких модулей глобально защитить фильтрами.
Имеет смысл что на basic, что на backend в advanced шаблоне
2.1.4) $frontendControllerConfig - по аналогии как выше только для фронта, может и пригодится зачем то

Что думаете? Минусы, плюсы, мнения, предложения?
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Структура универсального модуля для basic и advanced - НА ОБСУЖДЕНИЕ

Сообщение maleks »

Сделал кое какие архитектурные улучшения (добавил в описание красным цветом)
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Структура универсального модуля для basic и advanced - НА ОБСУЖДЕНИЕ

Сообщение maleks »

В результате пришел к этому.
Yii2 universal module sceleton - for basic and advanced templates
Ответить