在我的应用程序中,我使用Symfony4。我希望Symfony在两个目录(A和B)中搜索控制器。我发现了这样的内容:
controllers:
resource: '../src/DirectoryA/Controller/'
type: annotation
,但仅适用于一个目录。如何让Symfony在两个目录中搜索控制器?
致谢
答案 0 :(得分:4)
在您的config/services.yaml
App\DirectoryA\Controller\: # assuming you have namespace like that
resource: '../src/DirectoryA/Controller'
tags: ['controller.service_arguments']
App\DirectoryB\Controller\: # assuming you have namespace like that
resource: '../src/DirectoryB/Controller'
tags: ['controller.service_arguments']
这将为服务参数添加下一个目录。那就是根据您的问题回答的内容。在目录中,您发布的内容是路由文件,类似
controllers_a:
resource: '../src/DirectoryA/Controller/'
type: annotation
controllers_b:
resource: '../src/DirectoryB/Controller/'
type: annotation
答案 1 :(得分:0)
接受的答案当然是完全正确的。
但是,一旦从一个控制器目录移动到多个目录,更新services.yaml文件可能会有些麻烦。即使必须拥有专门用于控制器的目录也会受到限制。
这是另一种方法,它允许在任何需要的地方创建控制器并自动标记它们。
从一个空的控制器界面开始进行标记。
interface ControllerInterface {}
现在您的所有控制器都实现了该接口
class Controller1 implements ControllerInterface { ...
class Controller2 implements ControllerInterface { ...
然后调整内核,以使用controller标记自动标记所有控制器接口类。
# src/Kernel.php
protected function build(ContainerBuilder $container)
{
$container->registerForAutoconfiguration(ControllerInterface::class)
->addTag('controller.service_arguments')
;
}
然后保存。您可以随心所欲地创建控制器,而无需在services.yaml中创建任何内容。