问题 如何从捆绑包外部访问Symfony 2捆绑包配置?


,不要链接到 如何公开Bundle的语义配置

事实上,我已经拥有一个完全可用的捆绑包,有许多配置选项。捆绑包实际配置为 app/config.yml,在其自己的部分。我已经使用TreeBuilder实现了ConfigurationInterface,依此类推。我能够成功地在捆绑包中注入配置并在捆绑代码中使用它。

然而,我想做的事情非常简单,但即使我有一个 完全工作捆绑 使用Composer发布和安装,我已经玩Symfony 2只有几个星期了,可能答案确实非常简单......但我不知道!

如何从我的app控制器访问捆绑配置?

例如......这就是配置 app/config.yml (其中“devices”具有数组原型):

my_bundle:
    format: standard
    devices:
        main:
            color: yellow
            capacity: 200

如何使用捆绑包从应用程序的控制器访问这些值?


11375
2017-09-06 12:01


起源

我考虑过从包中公开配置......但是如果我不是捆绑作者怎么办? (另外,我真的不想更改捆绑代码只是为了实现这一点。) - J. Bruni
而我只想要 读 配置值。 - J. Bruni
这取决于您如何实现bundle的配置构建器 - 它使用特定前缀预先设置其参数。在你的情况下,它可能是这样的 my_bundle.devices。否则,你可以发布你的代码吗? DependencyInjection/MyBundleExtension.php ? - Vitalii Zurian
嗯,我的问题很基本......假设是 my_bundle.devices...我该如何访问它?方法调用是什么?代码: github.com/paggybrasil/PaggyBoletoBundle/blob/master/... - J. Bruni
天啊......如果我看了我自己的代码! :-) paggy_boleto.config - J. Bruni


答案:


整个配置在参数中公开 paggy_boleto.config 作为嵌套数组。要在控制器中访问它:

$config = $this->container->getParameter('paggy_boleto.config');

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

如果您需要访问其他bundle配置,您必须查看bundle Extension类,它们如何将配置公开到di容器中。像你这样的一些包暴露了整个配置,而其他一些包则没有暴露(它们只公开特定的参数)。

在PaggyBaletoBundle中这是相关的 线

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

10
2017-09-06 12:14



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


这取决于您如何实现bundle的配置构建器 - 它使用特定前缀预先设置其参数。

根据 你的情况 它是 paggy_boleto.config


3
2017-09-06 12:20



+1你真的帮助了我,你的评论恰到好处,让我在发布之前“发现”答案。我接受了Pazi的一个,因为他写了一个详细的答案,他只有2.8k代表,而你已经有5k,等等。我非常感谢你,我希望我能接受这两个答案并给你一百个代表点。一千!所以,要点到Pazi,但你有我的感激和祝福! - J. Bruni
@ J.Bruni哈哈,谢谢你:D - Vitalii Zurian


您应该使用parameters.yml来实现此目的。 然后你可以像这样轻松地获取控制器中的东西

$parameters = $this->container->getParameter('devices');

0
2017-09-06 12:12



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