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

时间:2013-12-11 21:11:25

标签: zend-framework zend-framework2 zend-framework-modules

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

在我的情况下,我使用Doctrine2作为我的数据库

3 个答案:

答案 0 :(得分:1)

Vincent Blanchon的延迟加载模块管理器可能是您问题的解决方案。它允许有条件地启用或禁用模块。

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

答案 1 :(得分:0)

application.config.php是zf2 bootstrapping加载的第一个元素之一,并传递给ServiceManager,并循环application.config.php中列出的所有模块(和加载)。此时,没有加载doctrine(因此您无法使用zend框架运行脚本来检查模块中的模块是否已“激活”)。

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

  

//运行应用程序!

     

Zend \ Mvc \ Application :: init(require'config / application.config.php') - > run();

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

但这不是一个好主意,因为您需要指定数据库连接,设置数据库密码等,并“在没有zf2的情况下自行开发”。

当你动态地禁用模块时,我认为你做了一些“错误”,因为你需要一个模块或者你不需要 - 在开发环境中启用了一个模块,在你的实时环境中禁用了模块。简单,因为它

答案 2 :(得分:0)

我有更好的方法来做到这一点

只加载应用程序配置文件中的应用程序模块

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.


    }

现在您的模块已由您的数据库加载。