2015-07-01 32 views
1

我想知道爲什麼無法將根節點配置名稱空間注入到服務中。Symfony2 - 配置 - 注入根節點參數以獲取整個配置

實施例的配置:

my_bundle: 
    foo: bar 
    foobar: 123 
    bar: 1 

這將是MyBundle /資源/配置/ services.xml中的服務配置。

... 
<service id="my_bundle.service.my" class="MyService"> 
    <argument>%my_bundle%</argument> 
</service> 
... 

現在我想將配置注入到我的服務類中。但是這不起作用,因爲symfony2不知道關於配置根節點「my_bundle」的任何信息。

class MyService 
{ 
    public function __construct($config) {} 
} 

我知道,我可以分割配置,當我需要在服務類,使其工作添加儘可能多的構造函數的參數。但是這會在構造函數中導致大量的參數。

此外,我認爲注入整個symfony2容器是不好的做法。

也許你們其中一個人可以回答我: 1.爲什麼這不起作用? 2.我瞭解整個配置系統是否錯誤? 3.我認爲如果我注入根節點,所有在名稱空間「my_bundle」下定義的內容都可用?

或者也許你們中的任何人找到了解決方案並分享它?

謝謝。

回答

3

在你捆綁擴展,創建一個參數:

public function load(array $configs, ContainerBuilder $container) 
{ 
    $configuration = new Configuration(); 
    $config = $this->processConfiguration($configuration, $configs); 

    $container->setParameter('my_bundle', $config); 
} 

然後你就可以在服務聲明中注入它

說明

什麼你被下my_bundle添加選項創建密鑰是一個捆綁配置,在您的捆綁包擴展中處理。

它不是一個在parameter關鍵字下定義的參數,但是在你的bundle擴展中,你可以訪問容器,所以在那個地方你可以添加這個bundle配置作爲參數(一旦處理,檢查等),然後把它注入你的服務參數中。

+0

非常感謝你爲我工作。我不知道爲什麼我沒有想到這一點:) –