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

时间:2019-06-02 19:04:15

标签: symfony symfony4

我正在寻求实现Nikola Posa推荐的文件夹结构。

我想要的结构如下所示。

src/
   Domain/
      User/
         UserEntity.php
         UserController.php
      Pages/
         DefaultPageController.php

这个想法是从逻辑上对功能/名称空间或类似内容进行分组。我似乎收到此错误:

  

/ Users / dev / Sites / web / html /中的文件“ ../src/Controller”不存在(在:/ Users / dev / Sites / web / html / sandbox / php / crud / config中) sandbox / php / crud / config / services.yaml(已加载到资源“ /Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml”中)。

我不确定将这些作为服务进行连接的重要性。如果我注释掉App\Controller的{​​{1}}属性,它将消失。

如何在具有services.yaml结构的service.yaml中加载控制器?

2 个答案:

答案 0 :(得分:1)

您当然可以放学,只需要分别定义每个控制器服务:

# config/services.yaml
Domain\Feature\FeatureController:
    tags: ['controller.service_arguments']

但是,一旦习惯了自动布线,然后拼出每个服务就很痛苦。或者,您可以使用自动配置功能将控制器标签添加到选定的类。首先声明一个空接口,然后让您的控制器实现该接口:

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');

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

答案 1 :(得分:1)

我会去创建一个像Cerad建议的Controller界面。但是,由于Symfony 3.3,您不必接触内核:

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

瞧!