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

时间:2017-08-05 15:49:53

标签: symfony symfony-3.2

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

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;
    }

}

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

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

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

当我跑步时

bin/console config:dump-reference MyBundle

我确实看到了我的期待

让我的bundle参数合并到应用程序参数中我缺少什么?我看到列出的第三方捆绑包但不是我自己的捆绑包。我尽可能逐字地跟踪文档,因此据我所知,遵循惯例......

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

想法?

1 个答案:

答案 0 :(得分:0)

我写了几篇博客文章,展示了如何set bundle configuration defaults using YAML files以及如何automatically set bundle configuration values as container parameters的后续行动。这是针对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中覆盖该参数(如果需要)。