简短版本:是什么在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_registry
,configured 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" />
#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私有数组的原因。有名为add
和addFromAliasAndConfiguration
的方法,它们会〜改变状态〜将值添加到$metadata
数组中,但是尚不清楚什么代码调用这些方法,和/或由什么sylius配置导致这些方法要调用的方法。
在尽可能深入的研究之后,我不确定这个兔子洞的深度如何,所以转向您:堆栈溢出:是什么用数据填充了sylius.resource_registry
服务?
答案 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>