2013-01-20 60 views
4

我不知道這是可能的,但是......ZF2 ModuleManager會配置合併 - 刪除鍵

的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 
] 
+0

任何用例可能? – Sam

+2

@Sam採取例如ZfcUser你只想要的類,但不是註冊的路由。此時取消註冊相當困難。該功能是計劃afaik superdweebie,但它不存在。配置知道哪個部分來自哪個模塊,因此您可以檢查所有這些部分,取消註冊某些內容然後重新構建配置。它應該可以工作,但目前還沒有簡單的API。 –

+0

如果我使用一行來「取消註冊」某些內容,或者如果我使用一行來「取消」一個配置,它有很大區別嗎?如果我不想要註冊ZfcUsers路由,我用'null'值覆蓋它們。或者這不起作用? ''routes'=> array('zfcuser'=> null)' – Sam

回答

6

這現在固定在zf2主。可能在zf2 2.3。看到它是如何做這個偉大的教程(見MERGE_CONFIG事件)

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

BTW在寫這篇教程的時候還只是一個公關,而不是在官方的文檔呢。

+1

請參閱http://zf2.readthedocs.org/en/develop/tutorials/config.advanced.html#manipulating-merged-configuration – EvanDotPro

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; 
} 

希望這有助於消除的關鍵。根據需要進行更改。

+0

這將刪除一個密鑰,但只有在所有配置合併後。需要的是在合併期間刪除密鑰的功能。有關最新討論,請參閱https://github.com/zendframework/zf2/issues/3823。截至撰寫時,問題仍未解決。 – superdweebie