我有一个包含我已配置的侦听器的包:
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)?
想法?
答案 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中覆盖该参数(如果需要)。