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 中覆盖它。
我有一个包,其中包含我配置的侦听器:
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 中覆盖它。