Comments 12
Модуль в Yii2 представляется законченной функциональной единицей, содержащей свои контроллеры, модели и представления. Подключение и отключение, условно, не должно приводить к каким бы то ни было бедам. Модули в Yii2 могут содержать в себе другие модули.
Если вы столкнулись с тем, что в нескольких местах используется одинаковая логика контроллера, то имеет смысл рассмотреть использование Standalone actions. Если дублируется view, то путь к view можно задавать используя алиасы. Если и то и то, то есть widgets. Хоть вы и сказали, что они вам не подошли, но я склонен думать, что вы просто неправильно пытались их использовать.
К слову: чем ваше решение отличается от Yii::$app->getModule('moduleName')
?
К слову: чем ваше решение отличается от Yii::$app->getModule('moduleName')?
Согласен, но тут мы получаем еще некую гибкость в плане управлением состоянием модуля и его позицией на конкретной странице, наш проект это CMS, где пользователю не надо будет лезть в конфиги/контроллер/вид только для того чтоб поменять позицию модуля на странице и т.д. а сделает все через интерфейс в админке сайта.
Спасибо!
Хм, наличие переключателя в админке действительно относительно оправдывает написание своего решения, но, с другой стороны, вы могли это сделать написав класс, реализующий BootstrapInterface
. Подключаете его в конфигурации и уже в нём выбираете из БД необходимые настройки модулей и инициализируете их.
Ну количество Bootstrap методов не ограничено ведь.
Ещё пара идей:
- Можно переопределить метод
getModule()
и релизовать внутри необходимый обработчик. - Можно в самих модулях, внутри
init()
методов читать конфигурацию.
Вариантов то много ;) Впрочем я ни в коем случае не намекаю, что ваше решение плохое. Просто можно было обойтись меньшей кровью.
Можно переопределить метод getModule() и релизовать внутри необходимый обработчик.
не плохая идея, даже было реализовано по началу похоже, есть базовый контроллер на котором был метод со всей логикой, но со временем принялось решение отделить «мух от котлет» :)
Нет, я имел в виду заменить оригинальный класс \yii\web\Application
и заставить его работать на себя. Так делают, это используют.
огромное спасибо за конкретную критику и идеи! :)
Правильно ли я понимаю, что вы с помощью модулей сделали некий аналог виджетов с привязой к конкретным позициям?
Yii2: Делаем модуль для управления модулями