【发布时间】:2020-03-08 10:17:11
【问题描述】:
出于我自己的好奇心,我目前正在创建一个基于 Symfony 组件的框架。
我想使用 symfony/dependency-injection 组件及其自动装配系统。
路由(带有注释)工作正常,但是当我尝试自动连接服务(内部或外部)时,我收到错误:
Uncaught ArgumentCountError: Too few arguments to function Shopper\Controller\IndexController::__construct(), 0 passed in
我创建了一个存储库来帮助您回答我的问题:https://github.com/kerwanp/shopper
【问题讨论】:
-
默认的 ControllerResolver 不支持容器,因此它将始终使用新的 IndexController。请改用 ContainerControllerResolver。
-
感谢您的快速答复!在“框架”参数中,我必须将“controller_resolver”从
HttpKernel\Controller\ControllerResolver::class更改为HttpKernel\Controller\ContainerControllerResolver::class?它不起作用,我误解了我的想法 -
您当然必须将容器注入解析器并确保您的控制器被定义为公共服务。我没有方便的例子。但是您也许可以在 ContainerControllerResolver::instantiateController 上中断以查看发生了什么。
-
您的意思是“将解析器注入容器”吗?我的控制器被定义为服务 (gist.github.com/kerwanp/5ad109080d472b0ab998797022b5dc82) ContainerControllerResolver 扩展了 ControllerResolver 并仅使用以下方式实例化控制器:
return new $class();不传递任何参数。 -
几点:您应该在在您的问题中包含相关代码(并且仅包含相关代码),而不是作为外部链接。此外,链接代码似乎不是引发此错误的代码(该示例中没有
IndexController)。另外,由于某种原因,您两次包含autoloader.php脚本,请不要这样做。
标签: php symfony dependency-injection