首页 > 解决方案 > 在 Sylius/Symfony 中解析控制器服务

问题描述

锄头让 Symfony 将Sylius服务解析sylius.controller.shop_user为控制器类文件Sylius\Bundle\UserBundle\Controller\UserController

我的理解是那sylius.controller.shop_user是一个服务,在Symfony里面会有对应的服务配置。这个服务配置将告诉 Symfony 在需要实例化服务时使用哪个类。

但是,我似乎在任何地方都找不到sylius.controller.shop_userSylius 源配置中的配置。路由文件中只是对此服务的引用

#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 是如何在幕后工作的。

标签: phpsymfonysylius

解决方案


控制器服务是基于 ResourceBundle 在Sylius\Bundle\ResourceBundle\DependencyInjection\Driver\AbstractDriver::addController. 加载包时调用此驱动程序。


推荐阅读