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

Symfony 6.3移除sensio扩展后#[MapEntity]找不到EntityValueResolver

问题分析与解决方案

第一个错误:Unable to guess how to get a Doctrine instance from the request information for parameter "externalAttachment"

这个错误的核心是参数映射不匹配:

  • 原#[Entity]注解显式指定了参数名'attachment',对应方法参数$attachment;但替换为#[MapEntity]后,方法参数名改为$externalAttachment,而路由中并没有名为externalAttachment的变量(路由变量是advertisementId和attachmentId)。
  • #[MapEntity]默认会尝试根据参数名匹配路由变量,找不到匹配时就会抛出这个错误。

修复方式:

显式指定实体类,并确保expr正确调用仓库方法:

#[MapEntity(
    class: ExternalAttachment::class,
    expr: 'repository.findValidAttachment(advertisementId, attachmentId)'
)]
ExternalAttachment $externalAttachment

同时确认ExternalAttachment对应的Doctrine仓库确实存在findValidAttachment方法,且参数顺序与路由变量一致。


第二个错误:You have requested a non-existent resolver "Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver"

这个错误是因为Doctrine Bridge的实体解析器未正确注册或依赖缺失:

  • #[MapEntity]依赖symfony/doctrine-bridge包中的EntityValueResolver,移除sensio/framework-extra-bundle后,若该桥接包缺失、配置未启用,或缓存残留,都会导致解析器找不到。

修复步骤:

  1. 检查并安装Doctrine Bridge
    执行命令确认包是否存在:

    composer show symfony/doctrine-bridge
    

    若未安装,运行:

    composer require symfony/doctrine-bridge
    
  2. 启用Doctrine参数解析器配置
    在config/packages/doctrine.yaml中确保启用argument_resolver:

    doctrine:
        orm:
            # 其他ORM配置...
            argument_resolver: true
    
  3. 清理测试环境缓存
    功能测试依赖测试环境缓存,残留的旧缓存会导致解析器无法被识别:

    php bin/console cache:clear --env=test
    
  4. 移除残留的Sensio配置
    删除config/packages/sensio_framework_extra.yaml(若存在),并检查services.yaml、路由配置中是否还有引用该bundle的内容。

  5. 确保版本兼容
    执行命令更新Doctrine Bridge至与Symfony 6.3匹配的版本:

    composer update symfony/doctrine-bridge --with-all-dependencies
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:55:22