【发布时间】:2019-01-22 20:39:17
【问题描述】:
Hoes Symfony 是否将 Sylius 服务 sylius.controller.shop_user 服务解析为控制器类文件 Sylius\Bundle\UserBundle\Controller\UserController。
我的理解是sylius.controller.shop_user是一个服务,在Symfony里面会有对应的服务配置。这个服务配置将告诉 Symfony 在需要实例化服务时使用哪个类。
但是,我似乎在任何地方的 Sylius 源配置中都找不到 sylius.controller.shop_user 配置。路由文件中只是对此服务的引用
#File: src/Sylius/Bundle/ShopBundle/Resources/config/routing/ajax/user.yml
sylius_shop_ajax_user_check_action:
path: /check
methods: [GET]
defaults:
_controller: sylius.controller.shop_user:showAction
_format: json
_sylius:
repository:
method: findOneByEmail
arguments:
email: $email
serialization_groups: [Secured]
或在磁盘容器缓存文件中。
var/cache/dev/srcKernelDevDebugContainer.xml
1798: <parameter key="sylius.controller.shop_user.class">Sylius\Bundle\UserBundle\Controller\UserController</parameter>
15230: <service id="sylius.controller.shop_user" class="Sylius\Bundle\UserBundle\Controller\UserController" public="true">
那么 Symfony 如何知道为该服务实例化正确的类?
有没有我看不到的配置?一些自动生成类的 Symfony 魔法?其他一些我不知道我不知道的神秘的第三件事?
我没有任何具体的任务,我只是想了解一下 Sylius 和 Symfony 是如何工作的。
【问题讨论】:
-
可能是在SyliusBundle依赖注入扩展类中动态配置的。只是一个猜测,但扩展类是大多数 di 魔法往往发生的地方。
-
@Cerad 作为 Symfony 正常动态控制器处理程序的一部分?或者 Sylius 正在做什么特别的事情?还是别的什么?
-
我没有深入了解 Sylius,但扩展是通常定义服务的地方。如果它没有在扩展本身中定义,几乎可以肯定是在编译器通过。控制器没什么特别的。 Symfony 路由将拉取您为 _controller 指定的任何服务并对其调用操作。尝试在整个代码库中搜索 shop_user。这应该让你明白定义。
-
所以出于好奇,我加载了 Sylius 并四处探查了一下。这确实是一个巨大的工程。很多很多的抽象层次。 @pamil 下面的回答是一个很好的起点。