2013-02-07 73 views
0

似乎在Module.phpgetConfig方法中定义的所有配置设置在整个应用程序中全局合并。对我而言,这很奇怪,因为我需要为每个模块配置不同的配置:数据库设置,一些工厂和view_manager设置,这些设置目前被最后加载的模块覆盖。我如何使用配置专用于某些模块,该模块中的范围为$this->getServiceLocator()->get('Config')。我现在唯一的想法是在调度事件中将我的模块配置与$this->getServiceLocator()->get('Config')合并,如果这是唯一的情况,那么优先使用哪个优先级,以便我可以利用所有设置:view_manager,service_manager ect?Zend2隔离模块配置

对我来说,理想的解决方案是如果配置设置在某些名称空间的作用域内,将仅在该名称空间下使用。

回答

2

您可以根据自己的喜好来嵌套配置值。

成像你有一个名为“mymodule”的模块,它需要连接到一个特殊的模块特定的数据库(与整个应用程序的主DB不同)。你会做这样的事情:

mymodule.global.php.dist:

return array(
    'mymodule' => array(
     'db' => array('host'=>'localhost', ...) 
    ) 
) 

然后,只需确保Mymodule中是看$config['mymodule']['db'],而不是$config['db']

+0

非常像这里所述。如果有特定的配置,请将命名空间添加为配置数组的第一级,并在其下面放置其他所有配置。这也是所有主要模块都在做的方式;) – Sam

0

你可以得到以这种方式配置模块的设置:

$moduleManager = $this->getServiceLocator()->get('ModuleManager'); 
$applicationModule = $moduleManager->getModule('Application'); 
$applicationConfig = $applicationModule->getConfig();