Symfony bundle配置参数在侦听器中不可用?



我有一个捆绑包,其中包含我配置的侦听器:

class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder ()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('mybundle_name');
$rootNode
->children()
->scalarNode('name')->defaultValue('value')
->end()
;
return $treeBuilder;
}
}

我还有一个侦听器,它注入了一些服务,主要是原则和容器参数:

services:
app.router_subscriber:
class: MyBundleEventSubscriberRequestSubscriber
calls:
- [setEntityManager, ['@doctrine.orm.entity_manager']]
- [setContainer, ['@service_container']]
tags:
- { name: kernel.event_subscriber }

当我转储$this-> 容器时,我可以看到除了上面定义的参数之外的参数。

当我跑步时

bin/console config:dump-reference MyBundle

我确实看到了我的期望

将捆绑包参数合并到应用程序参数中缺少什么?我看到列出了第三方捆绑包,但没有列出我自己的捆绑包。我尽可能逐字逐句地遵循了文档,因此据我所知,这些惯例一直得到遵守......

编辑 |我还没有创建一个捆绑 config.yml 文件 - 我假设 Configuraiton 对象为我做了这件事 - 设置架构和默认值 - 可以被应用程序配置覆盖(如果需要(。我是否需要指定一个捆绑包 config.yml 并将这样的东西导入到应用程序中(在 symfony2 中合并配置文件(?

想法?

我写了几篇博客文章,展示了如何使用 YAML 文件设置捆绑包配置默认值,以及如何自动将捆绑包配置值设置为容器参数。 这是针对Symfony2的,写于2014年,我链接到的Symfony文档的特定部分从Symfony 2.3开始消失了,但同样的概念仍然适用。

这些帖子的主要收获是,您可以通过load()方法手动将配置值设置为捆绑包的 Extension 类中的容器参数,如下所示:

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

请注意,您可以调用$this->getAlias()来获取捆绑包的根名称 (mybundle_name(。 使用上述调用,您将拥有一个定义为mybundle_name.name参数,然后如果需要,您可以在应用程序的 config.yml 中覆盖该参数。

最新更新