2015-07-01 34 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

非常感谢你为我工作。我不知道为什么我没有想到这一点:) –