如何从Symfony 2 bundle外部访问bundle配置?

12
不要链接到如何为Bundle公开语义化配置
实际上,我已经拥有一个完全工作的 Bundle,具有许多配置选项。Bundle 实际上在app/config.yml 中进行配置,在其自己的段落中。我已经实现了ConfigurationInterface,并使用了它的TreeBuilder等等。我能够成功地将配置注入Bundle并在Bundle代码中使用它。
然而,我想做的事情非常简单,但即使我已经发布并且可以使用Composer安装完全工作的bundle,我只是在 Symfony 2 上玩了几周,答案可能真的非常简单......但我不知道! 我如何从我的应用程序控制器访问Bundle配置? 例如......这是位于app/config.yml中的配置(其中“devices”具有数组原型):
my_bundle:
    format: standard
    devices:
        main:
            color: yellow
            capacity: 200
如何使用 bundle 在应用程序的控制器中访问这些值?

我考虑过从bundle内部暴露配置...但如果我不是bundle的作者呢?(而且我真的不想改变bundle代码来完成这个任务。) - J. Bruni
我只想简单地读取配置值。 - J. Bruni
1
这取决于您如何实现bundle的配置构建器 - 它会在其参数前面添加某个前缀。在您的情况下,它可能类似于 my_bundle.devices。否则,您可以发布您的 DependencyInjection/MyBundleExtension.php 代码吗? - Vitalii Zurian
嗯,我的问题非常基础...假设它是my_bundle.devices...我该如何访问它?方法调用是什么?代码:https://github.com/paggybrasil/PaggyBoletoBundle/blob/master/DependencyInjection/PaggyBoletoExtension.php - J. Bruni
天啊...如果我早点看自己的代码就好了!:-) paggy_boleto.config - J. Bruni
3个回答

12
整个配置以嵌套数组的形式暴露在参数paggy_boleto.config中。要访问它,在控制器中:
$config = $this->container->getParameter('paggy_boleto.config');

var_dump 配置以查看如何访问其中的条目。

如果您需要访问其他捆绑包配置,您必须查看捆绑包扩展类,了解它们如何将配置公开到 DI 容器中。像您的一样,某些捆绑包会公开整个配置,而其他一些捆绑包则不会(它们仅公开特定参数)。

在 PaggyBaletoBundle 中,这是相关的

$container->setParameter('paggy_boleto.config', $config);

谢谢!我知道这很简单。我已经用Symfony 2玩了一两个星期,然后转到Laravel + Angular.JS,现在又回到Symfony 2...脑子里有太多并发线程了! - J. Bruni

3

这取决于您如何实现bundle的配置构建器 - 它会在其参数前面添加特定的前缀。

根据您的情况,它是paggy_boleto.config


+1 你真的帮了我很大的忙,你的评论直接点中了问题的答案,让我在这里发布之前就“发现”了答案。我选择了Pazi的回答,因为他写了一个详细的答案,他只有2.8k的声望,而你已经有5k等等。非常感谢你,我希望我能够接受两个答案并给你一百个声望点。一千个!所以,声望点给了Pazi,但你有我的感激和祝福! - J. Bruni

0
你应该使用parameters.yml来实现这个目的。 然后你可以在控制器中轻松地获取这些内容,就像这样。
$parameters = $this->container->getParameter('devices');

确实... @thecatontheflat 指引了我正确的方向... 我已经得到了:$this->container->getParameter('paggy_boleto.config'); - J. Bruni
如果您需要访问语义包配置,则parameters.yml将无法工作。 - Emii Khaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接