Php Symfony:get()-这到底是如何工作的?
我在Symfony示例应用程序中有一行内容如下:Php Symfony:get()-这到底是如何工作的?,php,symfony,Php,Symfony,我在Symfony示例应用程序中有一行内容如下: $seo = $this->get('sonata.seo.page'); 但是,config.yml文件的内容如下: sonata_seo: page: metas: property: ... etc ... 我已经读过了,但我不清楚get('sonata.seo.page')是如何工作的。它是否以某种方式等同于config文件中的键/值?i、 e.sonata_seo中的下划线是否神奇地变为句点?您无法直接
$seo = $this->get('sonata.seo.page');
但是,config.yml
文件的内容如下:
sonata_seo:
page:
metas:
property: ... etc ...
我已经读过了,但我不清楚
get('sonata.seo.page')
是如何工作的。它是否以某种方式等同于config
文件中的键/值?i、 e.sonata_seo
中的下划线是否神奇地变为句点?您无法直接访问config.yml中的值,就像parameters.yml中的值一样
该文件可以存储包的配置值
阅读更多内容在这种情况下,通常在控制器操作中,它得到的是一个 在本例中,
sonata.seo.page
是对服务的引用,该服务在sonata项目/seo包中设置,它返回类的实例。通常,此信息在本地配置文件(config.yml或其包含的文件)中设置,但服务返回允许您在运行时更改值的类。没有(直接)在config.yml中定义服务。是捆绑包定义了服务。使用$this->get('sonata.seo.page')代码>你得到了
config.yml文件只是用于定制捆绑包。SeoBundle从config.yml
中定义语义部分sonata\u seo
,并注册DI容器的所有权
扩展实现了load()
方法。sonata_seo中的配置值作为其第一个参数传递。
方法从以下位置加载各种资源,包括服务定义:
Sonata\SeoBundle\Seo\SeoPage
...
接下来,使用给定的配置参数设置扩展名sonata.seo.page
。
当服务定义及其设置嵌入到容器中时,将在容器编译期间调用此过程。此过程的结果可以在缓存目录中的转储容器中找到
这是Symfony bundle的一系列工作:定义配置结构、进行扩展、设置服务。从我使用Symfony并查看其容器的发现来看,有private$下划线map=array(“'''=>'.=>''''.'\'=>'.'\'=>''.'\'=>'.''''''.''''.'''''.''''''.''''''''.''>'''''
并在get()
方法中使用strtr()
并将点更改为下划线('sonata.seo')->('sonata_seo')
<parameter key="sonata.seo.page.default.class">Sonata\SeoBundle\Seo\SeoPage</parameter>
...
<service id="sonata.seo.page.default" class="%sonata.seo.page.default.class%"/>