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后,若该桥接包缺失、配置未启用,或缓存残留,都会导致解析器找不到。
修复步骤:
检查并安装Doctrine Bridge
执行命令确认包是否存在:composer show symfony/doctrine-bridge若未安装,运行:
composer require symfony/doctrine-bridge启用Doctrine参数解析器配置
在config/packages/doctrine.yaml中确保启用argument_resolver:doctrine: orm: # 其他ORM配置... argument_resolver: true清理测试环境缓存
功能测试依赖测试环境缓存,残留的旧缓存会导致解析器无法被识别:php bin/console cache:clear --env=test移除残留的Sensio配置
删除config/packages/sensio_framework_extra.yaml(若存在),并检查services.yaml、路由配置中是否还有引用该bundle的内容。确保版本兼容
执行命令更新Doctrine Bridge至与Symfony 6.3匹配的版本:composer update symfony/doctrine-bridge --with-all-dependencies
内容的提问来源于stack exchange,提问作者DumperJumper
相关产品推荐
相关产品推荐

