在 Sylius/Symfony 中解析控制器服务
Resolving Controller Services in Sylius/Symfony
Hoes Symfony 将 Sylius 服务 sylius.controller.shop_user
服务解析到控制器 class 文件 Sylius\Bundle\UserBundle\Controller\UserController
.
我的理解是sylius.controller.shop_user
是一个服务,在Symfony中会有相应的服务配置。这个服务配置会告诉 Symfony 在需要实例化服务时使用哪个class。
但是,我似乎无法在任何地方的 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 如何知道为这个服务实例化正确的class?
是否有我没有看到的配置?自动生成 class 的一些 Symfony 魔法?其他一些神秘的第三件事,我不知道我不知道什么?
我心中没有任何具体任务,我只是想了解一下 Sylius 和 Symfony 的幕后工作原理。
控制器服务是根据Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\AbstractDriver::addController
中ResourceBundle的配置定义的。加载包时调用此驱动程序。
名称为 sylius.controller.[entity-name]
的服务是
西利乌斯
entity resource system。据我所知,当您定义新的学说实体时
以特定的方式和
register them as a Sylius resource, Sylius 会
根据您的自动生成这些控制器服务
配置。
定义这些服务的实际代码行
is here.
#File: src/Sylius/Bundle/ResourceBundle/DependencyInjection/Driver/AbstractDriver.php
/* ... */
$container->setDefinition($metadata->getServiceId('controller'), $definition);
/* ... */
Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\AbstractDriver
class 是(从 1.3 开始)一个基础 class
Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\Doctrine\DoctrineORMDriver
class。 Symfony 如何最终使用这个 class 尚不清楚,但是
幸运的是超出了这个答案的范围。
Hoes Symfony 将 Sylius 服务 sylius.controller.shop_user
服务解析到控制器 class 文件 Sylius\Bundle\UserBundle\Controller\UserController
.
我的理解是sylius.controller.shop_user
是一个服务,在Symfony中会有相应的服务配置。这个服务配置会告诉 Symfony 在需要实例化服务时使用哪个class。
但是,我似乎无法在任何地方的 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 如何知道为这个服务实例化正确的class?
是否有我没有看到的配置?自动生成 class 的一些 Symfony 魔法?其他一些神秘的第三件事,我不知道我不知道什么?
我心中没有任何具体任务,我只是想了解一下 Sylius 和 Symfony 的幕后工作原理。
控制器服务是根据Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\AbstractDriver::addController
中ResourceBundle的配置定义的。加载包时调用此驱动程序。
名称为 sylius.controller.[entity-name]
的服务是
西利乌斯
entity resource system。据我所知,当您定义新的学说实体时
以特定的方式和
register them as a Sylius resource, Sylius 会
根据您的自动生成这些控制器服务
配置。
定义这些服务的实际代码行 is here.
#File: src/Sylius/Bundle/ResourceBundle/DependencyInjection/Driver/AbstractDriver.php
/* ... */
$container->setDefinition($metadata->getServiceId('controller'), $definition);
/* ... */
Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\AbstractDriver
class 是(从 1.3 开始)一个基础 class
Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\Doctrine\DoctrineORMDriver
class。 Symfony 如何最终使用这个 class 尚不清楚,但是
幸运的是超出了这个答案的范围。