如何使用数据库禁用 ZF2 中的特定模块 我在配置文件中有一个模块列表,认为在我的应用程序中的某个时刻,读取包含模块名称的表并禁用在数据库中标记为禁用的模块
就我而言,我使用 Doctrine2 作为我的数据库
如何使用数据库禁用 ZF2 中的特定模块 我在配置文件中有一个模块列表,认为在我的应用程序中的某个时刻,读取包含模块名称的表并禁用在数据库中标记为禁用的模块
就我而言,我使用 Doctrine2 作为我的数据库
Vincent Blanchon 的延迟加载模块管理器可能会解决您的问题。它允许有条件地启用或禁用模块。
这application.config.php
是 zf2 引导加载的第一个元素之一,并被传递到ServiceManager
wich 循环中列出的所有模块(和加载)application.config.php
。此时没有使用使用 zend 框架运行的脚本加载学说(因此您无法检查模块是否在您的数据库中“激活”)。
当您检查时,public/index.php
您可以看到引导开始的行
// 运行应用程序!
Zend\Mvc\Application::init(需要'config/application.config.php')->run();
这是您应该实现逻辑的点(建立数据库连接,创建应用程序配置)并将其传递给init()
方法。
但这不是一个好主意,因为您需要指定一个数据库连接、设置数据库密码等,以及“在没有 zf2 的情况下走自己的路”。
当您动态禁用模块时,我认为您犯了一些“错误”,因为您需要模块或不需要模块 - 模块在开发环境中启用并在您的实时环境中禁用。就这么简单
我有更好的方法来做到这一点
只需在应用程序配置文件中加载应用程序模块
在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.
}
现在您的模块已由您的数据库加载。