如何使用数据库禁用ZF2中的特定模块 我在配置文件中有一个模块列表 认为在我的应用程序的某个时刻,读取一个包含模块名称的表,并禁用它们在数据库中被禁用为已禁用
在我的情况下,我使用Doctrine2作为我的数据库
答案 0 :(得分:1)
Vincent Blanchon的延迟加载模块管理器可能是您问题的解决方案。它允许有条件地启用或禁用模块。
答案 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.
}
现在您的模块已由您的数据库加载。