是什么构成了Sylius资源元数据注册表?

时间:2019-04-28 22:14:13

标签: php symfony sylius

简短版本:是什么在sylius.resource_registry服务中填充数据?

长版:Sylius(使用Symfony构建的PHP电子商务框架)使用Symfony's custom route loading system根据特殊的配置值加载一些其他路由。自定义路由加载器类的名称为Sylius\Bundle\ResourceBundle\Routing\ResourceLoader

此资源加载器中的逻辑会先查找别名(example value of an alias),然后再寻找uses that alias to load metadata from a registry

$metadata = $this->resourceRegistry->get($configuration['alias']);

此注册表是一个标识符为sylius.resource_registryconfigured here的symfony服务。

#File: vendor/sylius/sylius/src/Sylius/Bundle/ResourceBundle/Resources/config/services.xml

<service id="sylius.resource_registry" class="Sylius\Component\Resource\Metadata\Registry" public="false" />

injected here

#File: vendor/sylius/sylius/src/Sylius/Bundle/ResourceBundle/Resources/config/services/routing.xml
<service id="sylius.routing.loader.resource" class="Sylius\Bundle\ResourceBundle\Routing\ResourceLoader" public="false">
    <argument type="service" id="sylius.resource_registry" />
    <argument type="service">
        <service class="Sylius\Bundle\ResourceBundle\Routing\RouteFactory" />
    </argument>
    <tag name="routing.loader" />
</service>

不过,the Sylius\Component\Resource\Metadata\Registry class has no constructor是,因此尚不清楚填充$ metadata私有数组的原因。有名为addaddFromAliasAndConfiguration的方法,它们会〜改变状态〜将值添加到$metadata数组中,但是尚不清楚什么代码调用这些方法,和/或由什么sylius配置导致这些方法要调用的方法。

在尽可能深入的研究之后,我不确定这个兔子洞的深度如何,所以转向您:堆栈溢出:是什么用数据填充了sylius.resource_registry服务?

1 个答案:

答案 0 :(得分:3)

一个Symfony编译器通过。具体来说:https://github.com/Sylius/Sylius/blob/master/src/Sylius/Bundle/ResourceBundle/DependencyInjection/Compiler/RegisterResourcesPass.php

它从sylius.resources的Symfony容器参数中加载配置,并为在addFromAliasAndConfiguration中找到的每个资源向sylius.resource_registry的服务定义添加一个对sylius.resources的方法调用。 / p>

相关问题