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

时间:2015-07-01 13:22:38

标签: php symfony configuration dependencies

我想知道为什么不可能将根节点配置命名空间注入服务。

示例配置:

function onUrlChange_(event) {
  ModalDialog.show('confirm', { //this is promise
    bodyContent: {
      i18n: 'forms.unsavedConfirmMessage'
    }
  }).then(function() {}, function () {
    event.preventDefault();
  })
}

这将是MyBundle / Resources / config / services.xml中的服务配置。

my_bundle: 
   foo: bar
   foobar: 123
   bar: 1

现在我想将配置注入我的服务类。但这不起作用,因为symfony2对配置根节点“my_bundle”一无所知。

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

我知道我可以拆分配置并在服务类中添加尽可能多的构造函数参数以使其工作。但这会导致构造函数中存在大量参数。

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

也许你们其中一个人可以回答我: 1.为什么这不起作用? 2.我是否了解整个配置系统错误? 3.如果我注入根节点,我认为命名空间“my_bundle”下定义的所有内容都可用吗?

或者也许你们中的任何人找到了解决方案并分享它?

感谢。

1 个答案:

答案 0 :(得分:3)

在捆绑扩展程序中,创建一个参数:

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

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

然后您可以将其注入服务声明

<强>说明

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

它不是parameter关键字下定义的参数,但是在您的捆绑扩展中,您可以访问容器,因此在该位置您可以将此捆绑配置添加为参数(一旦处理完毕) ,检查等),然后将其注入您的服务参数。