You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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作为路由配置的入口类型,原有方法的参数类型声明和框架实际传入的参数类型不匹配,因此触发强类型校验报错。

修复步骤

  1. 打开项目src/Kernel.php文件,在头部引用区删除旧的RouteCollectionBuilder引用,新增新类的引用:
    use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
    
  2. 修改configureRoutes方法的参数类型声明,将原来的RouteCollectionBuilder替换为RoutingConfigurator:
    protected function configureRoutes(RoutingConfigurator $routes): void
    
  3. 执行命令清空项目缓存即可生效:
    php bin/console cache:clear
    

内容的提问来源于stack exchange,提问作者user6057553

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:18:34