Как динамически отключить определенный модуль в Zend Framework 2
Как отключить конкретный модуль в ZF2 с помощью базы данных У меня есть список модулей в файле конфигурации, который думает, что в какой-то момент в моем приложении читает таблицу с именами модулей и отключает их, которые отмечены как отключенные в базе данных.
в моем случае я использую Doctrine2 в качестве базы данных
3 ответа
Менеджер модулей с отложенной загрузкой от Vincent Blanchon может стать решением вашей проблемы. Это позволяет условно включать или отключать модули.
У меня есть лучший способ сделать это
просто загрузите только модуль приложения в конфигурационном файле приложения
в application.config.php
'modules' => array(
'DoctrineModule',
'DoctrineORMModule',
'Application',
),
затем напишите метод в application/module.php, который называется
public function init(ModuleManager $moduleManager) {
$moduleManager->loadModule('xyz'); // xyz module will be fetched from db here or depend on you logic.
}
Теперь ваш модуль загружен вашей БД.
application.config.php
является одним из первых элементов, загружаемых начальной загрузкой zf2 и передаваемых ServiceManager
который зацикливает все модули (и нагрузку), перечисленные в application.config.php
, На данный момент доктрина не загружается (поэтому вы не можете проверить, является ли модуль "активным" в вашей базе данных) с помощью скрипта, работающего с Zend Framework.
когда вы проверяете public/index.php
Вы можете увидеть линию, где начинается начальная загрузка
// Запустить приложение!
Zend \ Mvc \ Application:: init (требуется 'config/application.config.php')->run();
это ваша точка, где вы должны реализовать логику (установить соединение с базой данных, создать конфигурацию приложения) и передать ее init()
метод.
но это не очень хорошая идея, потому что вам нужно указать соединение с БД, установить пароли БД и т. д. и "идти своим путем без zf2".
когда вы динамически отключаете модули, я думаю, что вы делаете что-то "не так", потому что либо вам нужен модуль, либо нет - модуль включен в среде разработки и отключен в вашей рабочей среде. так просто