maleks писал(а):Сам в раздумиях над лучшей структурой модульности, которая будет работать и на типа basic шаблоне и на таких шаблонах как advanced.
Давно уже задавался этим вопросом, и после очередных тестов пришли к такому выводу:
Для advanced приложения идеальная структура модуля будет примерно такой:
Код: Выделить всё
- module
-- controllers
--- backend
---- DefaultController.php
--- frontend
---- DefaultController.php
--models
--- backend
---- BackendModel.php
--- frontend
---- FrontendModel.php
--- DomainModel.php
-- views
--- backend
---- default
----- index.php
--- frontend
---- default
----- index.php
-- messages
--- en
---- module.php
--- ru
---- module.php
-- Module.php
-- composer.json
Для универсальной структуры basic и advanced нужно делать простую структуру модуля (хотя вариант что выше тоже подходит, только ссылки в этом случае будут иметь такой вид: /module/backend/default/action/)
Код: Выделить всё
- module
-- controllers
--- DefaultController.php
--- AdminController.php
-- models
--- DomainModels.php
--- AdminModels.php
--- PublicModels.php
-- views
--- default
---- index.php
--- admin
---- index.php
-- messages
--- en
---- module.php
--- ru
---- module.php
-- Module.php
-- composer.json
Первый вариант хорош тем что исходя из структуры advanced приложения, модулю можно быстро и удобно сменить "controllerNamespace" что позволит использовать в нужном приложении только доступные для этого приложения контроллеры и модели.
Пример:
Код: Выделить всё
'controllerNamespace' => 'vova07\users\controllers\frontend'
'controllerNamespace' => 'vova07\users\controllers\backend'
Для универсальности данная структура плоха тем, что делает разделение модуля, там где она вообще может не быть. Например в basic. Хотя вариант полностью рабочий и на универсальной основе.
Второй вариант хорош тем что он универсален и будет работать в любой структуре как родной. Единственный минус это плохая разделяемость frontend\backend функционала, и необходисть в больших настройках для этих целей.
Для безопстного разделения, было бы желательно использовать роли RBAC которые передаются через настройки модуля и подставляются в параметрах поведения "yii\filters\AccessControl" backend контроллера.