Symfony 5.4升级至6.X版本后出现路由参数类型不匹配报错
Symfony 5.4升级6.0触发路由配置类型报错
将项目从Symfony 5.4.10版本升级至Symfony 6.0.0版本后,会抛出如下类型错误:
App\Kernel::configureRoutes(): Argument #1 ($routes) must be of type Symfony\Component\Routing\RouteCollectionBuilder, Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator given, called in /vendor/symfony/framework-bundle/Kernel/MicroKernelTrait.php on line 210
问题排查
- 项目
Kernel.php第46行的configureRoutes方法原有定义:
protected function configureRoutes(RouteCollectionBuilder $routes): void
- 框架核心
MicroKernelTrait.php第210行实际调用该方法时传入的参数:
$configureRoutes->getClosure($this)(new RoutingConfigurator($collection, $kernelLoader, $file, $file, $this->getEnvironment()));
根本原因
Symfony 6.0版本对路由配置加载逻辑做了迭代,废弃并移除了旧版Symfony\Component\Routing\RouteCollectionBuilder类,统一使用Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator作为路由配置的入口类型,原有方法的参数类型声明和框架实际传入的参数类型不匹配,因此触发强类型校验报错。
修复步骤
- 打开项目
src/Kernel.php文件,在头部引用区删除旧的RouteCollectionBuilder引用,新增新类的引用:use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; - 修改
configureRoutes方法的参数类型声明,将原来的RouteCollectionBuilder替换为RoutingConfigurator:protected function configureRoutes(RoutingConfigurator $routes): void - 执行命令清空项目缓存即可生效:
php bin/console cache:clear
内容的提问来源于stack exchange,提问作者user6057553
相关产品推荐
相关产品推荐

