为什么Symfony 5控制器必须扩展AbstractController才能使自动装配工作?



我试图使一个基本的TestController与一个构造函数自动装配Logger服务为例。如果我不扩展AbstractController,我得到这个错误:

URI的控制器"/"控制器"AppControllerTestController"无法从容器中获取,因为它是私有的。您是否忘记用"controller.service_arguments"标记服务?

为什么?

您是否忘记使用"controller.service_arguments"标记服务?

你正确地标记你的自定义控制器了吗?通常,这是扩展SymfonyBundleFrameworkBundleControllerAbstractController的副作用:自动添加标记。您可以跳过扩展AbstractController,但是您必须自己添加标记,并且您不能使用一些辅助方法进行路由,安全检查。


关于这个问题的更多细节:解决控制器的服务依赖于控制器本身可以作为公共服务从容器中获取这一事实。现在,大多数服务默认都是私有的,这需要被重写。另一个编译器传递负责这一点,它遍历带有controller.service_arguments

标签的所有服务。

最新更新