Symfony:get() - 这究竟是如何工作的?

时间:2017-01-02 18:10:26

标签: php symfony

我在示例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中的下划线是否神奇地改变为一段时间?

4 个答案:

答案 0 :(得分:0)

您无法直接访问config.yml中的值,例如parameters.yml中的值。

该文件可以存储思想包的配置值。

了解更多here

答案 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工作:定义配置结构,制作扩展,设置服务。