我在config.yml文件中添加了一个如下设置:
app.config:
contact_email: somebody@gmail.com
...
在我的一生中,我都不知道如何将它读入一个变量。我在我的一个控制器中尝试了这样的操作:
$recipient =
$this->container->getParameter('contact_email');
但我得到一个错误消息:
必须定义参数“contact_email”。
我已经清空了缓存,我也到处找了Symfony2重新加载的站点文档,但我找不到如何做到这一点。
可能只是太累了,现在搞不清楚。谁能帮我吗?
7条答案
按热度按时间iyr7buue1#
不要在
app.config
中定义contact_email
,而是在parameters
条目中定义它:您应该会发现您在控制器中进行的调用现在可以工作了。
t5zmwmid2#
虽然将
contact_email
移动到parameters.yml
的解决方案很容易,正如其他答案中所建议的那样,但如果处理许多包或处理嵌套的配置块,则很容易使参数文件混乱。第一种方法:分离的配置块,将其作为参数获取
通过扩展(more on extensions here),您可以将其轻松地“分离”到
config.yml
中的不同块中,然后将其作为可从控制器获取的参数注入。在
DependencyInjection
目录中的Extension类中写入以下内容:然后在config.yml、config_dev.yml中,这样就可以设置
为了能够在
MyNiceBundleExtension
中处理config.yml
,您还需要在同一命名空间中有一个Configuration
类:然后,您可以从控制器中获取配置,就像您在最初的问题中所希望的那样,但要保持
parameters.yml
干净,并在config.yml
中的单独部分中设置它:第二种方法:分离的配置块,将配置注入到服务中
如果读者希望从服务中获取配置,那么还有一种更好的方法,它不会使“paramaters”公共空间变得混乱,甚至不需要将
container
传递给服务(实践中应避免传递整个容器)。上面的技巧仍然“注入”到您的配置的参数空间。
然而,在加载服务定义之后,您可以添加一个方法调用,例如
setConfig()
,它只将该块注入到服务中。例如,在Extension类别中:
然后在
services.yml
中,像往常一样定义服务,不做任何绝对更改:然后在您的
SillyManager
类中,添加以下方法:请注意,这也适用于数组而不是标量值!假设您配置了一个rabbit队列,并且需要主机、用户和密码:
当然你需要改变你的树,但然后你可以做:
然后在服务中执行以下操作:
希望这对你有帮助!
w3nuxt5m3#
我必须补充道格拉斯的答案,您可以访问全局配置,但symfony会转换一些参数,例如:
是
可以使用var_dump搜索指定的键或值。
ulmd4ohb4#
为了能够公开你的包的一些配置参数,你应该参考相关文档。这很容易做到:)
链接如下:How to expose a Semantic Configuration for a Bundle
eanckbw95#
就像前面所说的那样,您可以通过使用注入容器和它的parameter属性来访问任何参数。
"Symfony - Working with Container Service Definitions"是一篇关于它的好文章。
pkwftd7m6#
我从http://tutorial.symblog.co.uk/的代码示例中学到了一种简单的方法
1)请注意ZendeskBlueFormBundle和文件位置
2)通知Zendesk_BlueForm.emails.contact_电子邮件和文件位置
3)请注意我是如何在$client和控制器的文件位置中获取它的
z9smfwbn7#
在控制器内部:
从
config/config.yaml
获取配置: