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

Symfony bundle配置参数在侦听器中不可用?,symfony,symfony-3.2,Symfony,Symfony 3.2,我有一个包,其中包含我已配置的侦听器: class Configuration implements ConfigurationInterface { /** * {@inheritdoc} */ public function getConfigTreeBuilder () { $treeBuilder = new TreeBuilder(); $rootNode = $treeBuilder->root('m

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

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 }
当我转储$this->container时,我可以看到除了上面定义的我自己的参数之外的其他参数

当我跑的时候

bin/console配置:转储引用MyBundle

我知道我在期待什么

要将捆绑包参数合并到应用程序参数中,我缺少什么?我看到第三方捆绑包上市,但不是我自己的捆绑包。我尽可能一字不差地遵循文档,所以就我所知,约定已经被遵守了

编辑|我没有创建bundle config.yml文件-我假设Configurationon对象为我创建了该文件-设置模式和默认值-可以由应用程序配置覆盖(如果需要)。我是否需要指定一个bundle config.yml并将类似于()的内容导入到应用程序中


想法?

我写了几篇博客文章,展示了如何做到这一点,以及如何做到这一点的后续行动。这是为Symfony2编写的,写于2014年,我链接到的Symfony文档的特定部分从Symfony 2.3开始就消失了,但同样的概念仍然适用

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

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\u name
)。使用上述调用,您将有一个定义为
mybundle\u name.name
的参数,如果需要,您可以在应用程序的config.yml中覆盖该参数。

我不确定是否理解您的问题。配置值不会自动成为参数。您需要使用$container->setParameter()在Extension::load()方法中显式地创建它们;当然,你可能会问一些完全不同的问题。我也不确定我的问题是什么。我假设Configure::getConfigTreeBuilder()基本上设置了格式和期望值、默认值等,这就足以用默认值初始化容器了——我的应用程序代码可以使用这些默认值?基本上……我如何在内部初始化包(通过配置类和/或config.yml)并分别通过AppBundle或MyBundle中的服务容器提供这些参数。我已经跟踪了文档,我遗漏了一些东西,因为这些参数没有显示出来。我没能注册一些事情或是误解了一些事情。我刚刚发现了这一点,但我很感谢你确认我的思路是正确的。我希望文档在这方面更清楚一点-这让我在最后一个小时里一直在打转:o也非常像getAlias(),这很有帮助-没问题,我不知道为什么文档在2.2之后消失了,因为我认为有些文档很有用…我想这是为了简化流程,因为这通常适用于第三方捆绑包,而不是应用程序中的内部捆绑包。我相信他们有自己的理由……这些文档在很大程度上是令人难以置信的,但由于版本差异,我已经被刺痛了好几次。