Php Symfony:get()-这到底是如何工作的?

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中的下划线是否神奇地变为句点?您无法直接

我在Symfony示例应用程序中有一行内容如下:

$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%"/>