我在示例Symfony应用程序中有一行内容:
$seo = $this->get('sonata.seo.page');
但是config.yml
文件显示为:
sonata_seo:
page:
metas:
property: ... etc ...
我已阅读http://symfony.com/doc/current/service_container.html,但我不清楚get('sonata.seo.page')
的确切运作方式。它是否以某种方式等同于config
文件中的键/值?即sonata_seo
中的下划线是否神奇地改变为一段时间?
答案 0 :(得分:0)
答案 1 :(得分:0)
它是什么'得到'在这种情况下,通常在控制器动作中,是Symfony Service。
在这种情况下,sonata.seo.page
是对sonata-project/seo-bundle
中设置的服务的引用,该服务返回SeoPage类的实例。通常,此信息在本地配置文件(config.yml或其包含的文件)中设置,但该服务返回允许您在运行时更改值的类。
答案 2 :(得分:0)
config.yml中没有(直接)定义任何服务。它是定义服务的捆绑包。使用$this->get('sonata.seo.page');
,您获得those。
config.yml文件,它只用于自定义捆绑包。
答案 3 :(得分:0)
SeoBundle从sonata_seo
定义语义configuration部分config.yml
并注册DI容器的Extension。
扩展实现了load()
方法。来自sonata_seo
的配置值作为其第一个参数传递。
方法加载各种资源,包括来自Resources/config/service.xml
的服务定义:
<parameter key="sonata.seo.page.default.class">Sonata\SeoBundle\Seo\SeoPage</parameter>
...
<service id="sonata.seo.page.default" class="%sonata.seo.page.default.class%"/>
接下来,扩展程序使用给定的配置参数设置sonata.seo.page
definition。
当容器编译期间,当服务定义及其设置将嵌入容器中时,将调用此过程。您可以在缓存目录中的转储容器中找到此过程的结果。
这是Symfony软件包的typical scheme工作:定义配置结构,制作扩展,设置服务。