Symfony2 - 配置 - 注入根节点参数以获取整个配置

Symfony2 - Configuration - inject root node parameter to get the whole configuration

我想知道为什么无法将根节点配置命名空间注入到服务中。

示例配置:

my_bundle: 
   foo: bar
   foobar: 123
   bar: 1

这将是 MyBundle/Resources/config/services.xml.

中的服务配置
...
<service id="my_bundle.service.my" class="MyService">
   <argument>%my_bundle%</argument>
</service>
...

现在我想将配置注入我的服务 class。但这不起作用,因为 symfony2 对配置根节点 "my_bundle".

一无所知
class MyService
{
     public function __construct($config) {}
}

我知道我可以拆分配置并在服务 class 中添加所需数量的构造函数参数以使其正常工作。但这会导致构造函数中出现大量参数。

此外,我认为注入整个 symfony2 容器是不好的做法。

也许你们中的一位可以回答我: 1. 为什么这个不行? 2.我对整个配置系统的理解有误吗? 3.我以为注入根节点,命名空间"my_bundle"下定义的都可用?

或者你们中有人找到了解决方案并分享了吗?

谢谢。

在你的包扩展中,创建一个参数:

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

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

然后你可以在你的服务声明中注入它

说明

您通过在 my_bundle 键下添加选项创建的是捆绑配置,它在您的捆绑扩展中处理。

它不是在 parameter 关键字下定义的参数,但在您的包扩展中,您可以访问容器,因此您可以在那个地方添加此包配置作为参数(一旦处理,检查等),然后将其注入到您的服务参数中。