Symfony 4-自定义文件夹结构和服务

Symfony 4-自定义文件夹结构和服务,symfony,symfony4,Symfony,Symfony4,我希望实现一个由推荐的文件夹结构 我想要的结构类似于下面的结构 src/ Domain/ User/ UserEntity.php UserController.php Pages/ DefaultPageController.php 其思想是在逻辑上对功能/名称空间或类似内容进行分组。我似乎得到了这个错误: 文件“./src/Controller”不存在于/Users/dev/Sites/web/html/s

我希望实现一个由推荐的文件夹结构

我想要的结构类似于下面的结构

src/
   Domain/
      User/
         UserEntity.php
         UserController.php
      Pages/
         DefaultPageController.php
其思想是在逻辑上对功能/名称空间或类似内容进行分组。我似乎得到了这个错误:

文件“./src/Controller”不存在于/Users/dev/Sites/web/html/sandbox/php/crud/config中的/Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml中(加载在resource/Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml中)

我不确定将这些作为服务连接起来有多重要。如果我注释掉
services.yaml
App\Controller
属性,它就会消失


如何使用
src/Domain/Feature/FeatureController.php
结构在service.yaml中加载控制器?

当然,您可以回到过去,单独定义每个控制器服务:

# config/services.yaml
Domain\Feature\FeatureController:
    tags: ['controller.service_arguments']
然而,一旦您习惯了autowire,那么拼写每个服务都是一件痛苦的事情。或者,您可以使用自动配置功能将控制器标记添加到选定的类中。首先声明一个空接口,并让控制器实现它:

interface ControllerInterface {}

class SomeController implements ControllerInterface
然后调整src/Kernel.php

# src/Kernel.php
class Kernel {
    protected function build(ContainerBuilder $container)
    {
        $container->registerForAutoconfiguration(ControllerInterface::class)
            ->addTag('controller.service_arguments');


当然,这只是解决了控制器问题。您可能会遇到许多其他与autowire相关的问题。

我会去创建一个像Cerad建议的控制器界面。但是,由于您不必触摸内核:

services:
    _instanceof:
        YourApp\Ui\ControllerInterface:
            public: true
            tags: ['controller.service_arguments']