Как динамически отключить определенный модуль в Zend Framework 2

Как отключить конкретный модуль в ZF2 с помощью базы данных У меня есть список модулей в файле конфигурации, который думает, что в какой-то момент в моем приложении читает таблицу с именами модулей и отключает их, которые отмечены как отключенные в базе данных.

в моем случае я использую Doctrine2 в качестве базы данных

3 ответа

Решение

Менеджер модулей с отложенной загрузкой от Vincent Blanchon может стать решением вашей проблемы. Это позволяет условно включать или отключать модули.

https://github.com/blanchonvincent/zf2-lazy-loading-module

У меня есть лучший способ сделать это

просто загрузите только модуль приложения в конфигурационном файле приложения

в 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".

когда вы динамически отключаете модули, я думаю, что вы делаете что-то "не так", потому что либо вам нужен модуль, либо нет - модуль включен в среде разработки и отключен в вашей рабочей среде. так просто

Другие вопросы по тегам