Zend framework 如何动态禁用Zend Framework 2上的特定模块

Zend framework 如何动态禁用Zend Framework 2上的特定模块,zend-framework,zend-framework2,zend-framework-modules,Zend Framework,Zend Framework2,Zend Framework Modules,如何使用数据库禁用ZF2中的特定模块 我在配置文件中有一个模块列表 认为在我的应用程序中的某个时刻,读取一个包含模块名称的表,并禁用在数据库中标记为禁用的模块 在我的例子中,我使用Doctrine2作为我的数据库,application.config.php是zf2引导加载的第一个元素之一,并传递给ServiceManager,它循环application.config.php中列出的所有模块(和加载)。此时,没有使用运行zend framework的脚本加载条令(因此您无法检查您的数据库中的模

如何使用数据库禁用ZF2中的特定模块 我在配置文件中有一个模块列表 认为在我的应用程序中的某个时刻,读取一个包含模块名称的表,并禁用在数据库中标记为禁用的模块


在我的例子中,我使用Doctrine2作为我的数据库,
application.config.php
是zf2引导加载的第一个元素之一,并传递给
ServiceManager
,它循环
application.config.php
中列出的所有模块(和加载)。此时,没有使用运行zend framework的脚本加载条令(因此您无法检查您的数据库中的模块是否处于“活动”状态)

当您检查
public/index.php
时,您可以看到引导开始的行

//运行应用程序

Zend\Mvc\Application::init(需要'config/Application.config.php')->run()

这是您应该实现逻辑(建立数据库连接、创建应用程序配置)并将其传递给
init()
方法的地方

但这不是一个好主意,因为您需要指定一个db连接、设置db密码等,并“在没有zf2的情况下按自己的方式进行”


当您动态地禁用模块时,我认为您犯了一些“错误”,因为要么您需要一个模块,要么您不需要——要么模块在开发环境中启用,要么在活动环境中禁用。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.


    }

现在,模块由数据库加载

问题是,我需要开发一个模块管理器,可以选择在我的仪表板中安装或不安装一个或多个模块,比如wordpress的extensions manager,还有其他方法吗?就像我指出的那样,或者像在magento中一样,模块管理器是一个完全独立的站点,除了正常的应用程序之外。其中一个应用程序控制另一个应用程序的扩展。比如《作曲家》。有趣的是,你能给我解释清楚吗?