【问题标题】:Symfony2 - Configuration - inject root node parameter to get the whole configurationSymfony2 - 配置 - 注入根节点参数以获取整个配置
【发布时间】:2015-09-18 16:31:12
【问题描述】:

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

示例配置:

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>
...

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: php symfony configuration dependencies


    【解决方案1】:

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

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

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

    说明

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

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

    【讨论】:

    • 非常感谢它对我有用。我不知道为什么我没有想到这一点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2011-10-10
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多