迁移到Symfony 3.4后出现Autowire服务错误-如何显式配置值?
我正在将现有的迁移到Symfony 3.4后出现Autowire服务错误-如何显式配置值?,symfony,Symfony,我正在将现有的Symfony 2.8项目迁移到Symfony 3.4。将现有的AppBundle添加到新生成的Symfony 3.4project I后,出现以下错误: 无法自动连线服务 “AppBundle\Controller\CustomExceptionController”:参数 方法“\uu construct()”的“$useDebugMode”的类型暗示为“bool”,您可以 应明确配置其值 我发现了关于这个问题的其他几个问题,但解决方案总是指向service.yml文件中缺少的
Symfony 2.8
项目迁移到Symfony 3.4
。将现有的AppBundle
添加到新生成的Symfony 3.4
project I后,出现以下错误:
无法自动连线服务
“AppBundle\Controller\CustomExceptionController”:参数
方法“\uu construct()”的“$useDebugMode”的类型暗示为“bool”,您可以
应明确配置其值
我发现了关于这个问题的其他几个问题,但解决方案总是指向service.yml
文件中缺少的参数。然而,据我所知,这不是问题所在:
// CustomExceptionController.php
namespace AppBundle\Controller;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController;
...
class CustomExceptionController extends ExceptionController {
public function __construct(\Twig_Environment $twig, bool $useDebugMode, Translator $translator) {
parent::__construct($twig, $useDebugMode);
...
}
...
}
// services.yml
services:
...
app.exception_controller:
class: AppBundle\Controller\CustomExceptionController
arguments: ['@twig', '%kernel.debug%', "@translator.default" ]
我没有在app/config/config.yml
中显式设置/定义%kernel.debug%
,但我认为这是不必要的。是吗
因此,$useDebugMode
参数的值被显式设置为%kernel.debug%
的值。那么如何解决这个错误呢
// services.yml
services:
...
app.exception_controller:
class: AppBundle\Controller\CustomExceptionController
arguments:
$useDebugMode: '%kernel.debug%'
在参数列表中仅指定$useDebugMode
,其他两个参数将自动注入/自动连接
$useDebugMode
必须与构造函数中的相同
在参数列表中仅指定$useDebugMode
,其他两个参数将自动注入/自动连接
$useDebugMode
必须与构造函数中的相同。问题在于,当autowire扫描控制器目录并拾取CustomExceptionController时,它会在容器中查找id为CustomExceptionController的服务定义。您的id是app.exception.controller,因此找不到匹配项,因此它尝试连接并阻塞参数。只需将id更改为完整的类名,它就可以工作了。或从autowire中排除CustomExceptionController。问题是,当autowire扫描控制器目录并拾取CustomExceptionController时,它会在容器中查找id为CustomExceptionController的服务定义。您的id是app.exception.controller,因此找不到匹配项,因此它尝试连接并阻塞参数。只需将id更改为完整的类名,它就可以工作了。或者将CustomExceptionController从autowire中排除。虽然这稍微细化了一些内容,但并不能解决实际问题。哦,在我看来,kernel.debug参数可以在服务配置后解决。尝试设置$useDebugMode:true
阅读原始问题下的我的评论。错误完全来自其他方面。如果它通过了服务配置,那么kernel.debug稍后会得到解决,您应该选择其他参数或将整个容器注入其中,这不是最佳解决方案,这与调试参数无关,与服务id有关。请创建一个简单的项目并尝试一下。错误消息非常常见,可能有点误导。如果您计划使用autowire,那么您将遇到它,并且您将浪费大量时间(或者至少我是这么做的)了解真正的问题是什么。在这之后,它就变得微不足道了。虽然这稍微细化了一些东西,但它并不能解决实际问题。哦,在我看来,kernel.debug参数可以在服务配置之后解决。尝试设置$useDebugMode:true
阅读原始问题下的我的评论。错误完全来自其他方面。如果它通过了服务配置,那么kernel.debug稍后会得到解决,您应该选择其他参数或将整个容器注入其中,这不是最佳解决方案,这与调试参数无关,与服务id有关。请创建一个简单的项目并尝试一下。错误消息非常常见,可能有点误导。如果您计划使用autowire,那么您将遇到它,并且您将浪费大量时间(或者至少我是这么做的)了解真正的问题是什么。在那之后,它就变得微不足道了。