迁移到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,那么您将遇到它,并且您将浪费大量时间(或者至少我是这么做的)了解真正的问题是什么。在那之后,它就变得微不足道了。