zf2 ModuleManager配置合并 - 删除密钥

时间:2013-01-20 11:23:22

标签: zend-framework2

我不确定这是否可行,但是......

zf2 ModuleManager将按顺序合并模块的所有配置数组,然后合并任何用户定义的配置数组。因此,如果$config1$config2合并,则会获得$merged

$config1 = [
   'key1' => 1,
   'key2' => 2,
   'key3' => 3
]

$config2 = [
    'key1' => 'different',
    'key4' => 4
]

$merged = [
    'key1' => 'different',
    'key2' => 2
    'key3' => 3
    'key4' => 4
]

这很棒,适用于大多数情况。但是,如果我想删除密钥怎么办?如果我上面有$config1,并希望在下面创建此备用$merged,那么$config2的值应该是什么(请注意key2已删除)?

$merged = [
    'key1' => 'different',
    'key3' => 3
    'key4' => 4
]

2 个答案:

答案 0 :(得分:6)

现在已在zf2 master中修复。可能在zf2 2.3中。请参阅这个伟大的教程,了解它是如何完成的(参见MERGE_CONFIG事件)

https://github.com/weierophinney/zf2-documentation/blob/71aac39e9ae78eaca3739458c5a2ccf15f4cdb2c/docs/languages/en/tutorials/config.advanced.rst

BTW在撰写本教程时仍然只是一个公关,而不是官方文档。

答案 1 :(得分:2)

我们可以将任何module.php用于目的(您可以根据需要使其具体化)。

尝试以下代码

pulbic function init(){

$events = StaticEventManager::getInstance();

$events->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', array(
    $this,
    'removeMyKey'
    ), 110);
}
public function removeMyKey($mvcEvent){
    $sl = $mvcEvent->getTarget()->getServiceLocator();
    $config = $sl->get('Config');
    unset($config['key2']);
    $sl->set('Config',$config);
    return $sl;
}

希望这有助于删除密钥。根据需要进行更改。