我想使用功能内聚来组织我的控制器。
这意味着我不会有一个Controllers/
目录,这使得框架很容易,但我会按用例组织我的代码。一个任意的例子:
src/FetchLatestNews/Controller.php
src/FetchLatestNews/News.php
src/FetchLatestNews/NewsRepository.php
...ETC
但是,Symfony 默认设置为要求所有控制器都在一个地方。见services.yaml
:
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
按照上面的模板,我可以将新控制器放在src/FetchLatestNews/Controller
那里,然后每次都添加每个新控制器。但是,我不想,也不应该在每次创建新用例时手动更新此文件。
我怎样才能避免这个错误:
也许你忘记了将控制器注册为服务或者错过了用“controller.service_arguments”标记它
作为用户,我不必关心手动添加service_arguments
或任何其他配置。当我指定一条路线时,它指向的东西因此是一个控制器。
理想的工作流程是:
在我喜欢的任何地方创建一个控制器。
添加一个路由来routes.yaml
引用控制器。
就是这样!
是否可以在 Symfony 中实现此工作流程?应该是,因为路由中的任何内容 --> 某个类都将是控制器。有没有办法使用正则表达式或其他解决方案?
注意:这个答案暗示了一个空的界面类型的“hack”。这也不理想。还有其他选择吗?
蝴蝶刀刀