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

Symfony bundle config parameters not available in listener?

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

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: MyBundle\EventSubscriber\RequestSubscriber
        calls:
            - [setEntityManager, ['@doctrine.orm.entity_manager']]
            - [setContainer, ['@service_container']]
        tags:
            - { name: kernel.event_subscriber }

当我 dump $this->container 时,我可以看到除了我自己定义的参数之外的参数。

当我运行

bin/console config:dump-reference MyBundle

我确实看到了我所期待的

要将我的包参数合并到应用程序参数中,我缺少什么?我看到列出了第三方捆绑包,但没有看到我自己的捆绑包。我尽可能逐字地遵循了文档,因此据我所知已经遵循了约定......

编辑 |我还没有创建一个包 config.yml 文件 - 我假设 Configuraiton 对象为我做了 - 设置模式和默认值 - 这可以被应用程序配置覆盖(如果需要)。我是否需要指定一个包 config.yml 并将类似这样的内容导入应用程序 (Merge config files in symfony2)?

想法?

我写了几篇博文来展示如何 set bundle configuration defaults using YAML files, and a follow-up on how to automatically set bundle configuration values as container parameters。这是为 Symfony2 编写的,写于 2014 年,Symfony 文档的特定部分我 link 从 Symfony 2.3 开始就消失了,但同样的概念仍然适用。

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

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 中覆盖它。