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
关键字下定义的参数,但在您的包扩展中,您可以访问容器,因此您可以在那个地方添加此包配置作为参数(一旦处理,检查等),然后将其注入到您的服务参数中。
我想知道为什么无法将根节点配置命名空间注入到服务中。
示例配置:
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
关键字下定义的参数,但在您的包扩展中,您可以访问容器,因此您可以在那个地方添加此包配置作为参数(一旦处理,检查等),然后将其注入到您的服务参数中。