Symfony安装PHPUnit后@ParamConverter报Recipe实体找不到如何解决
问题修复方案
该报错核心为ParamConverter无法根据路由传入的id匹配到对应的Recipe实体,结合安装PHPUnit后突然触发问题的场景,按以下步骤依次排查修复:
1. 修正@ParamConverter注解的类名配置
你当前注解中的class="Recipe"缺少完整命名空间,Symfony无法正确定位实体类,修改为以下两种写法任意一种即可:
- 写法1:直接写完整类名
/** * @Route("/api/recipes/{id}", name="recipeGetID", methods={"GET"}) * @ParamConverter ("recipe", class="App\Entity\Recipe") */
- 写法2:用::class语法(更推荐,避免拼写错误)
先在控制器顶部导入实体类:
use App\Entity\Recipe;
再修改注解:
@ParamConverter ("recipe", class=Recipe::class)
2. 移除方法中冗余的$id参数
ParamConverter会自动根据路由的{id}参数查询实体并注入到$recipe变量,方法中同时声明$id参数会导致参数解析冲突,修改方法签名为:
public function GetID(Recipe $recipe): Response
3. 检查SensioFrameworkExtraBundle配置
安装PHPUnit时可能自动修改了Bundle的默认配置,打开config/packages/sensio_framework_extra.yaml,确认以下配置为开启状态:
sensio_framework_extra: request: converters: true auto_convert: true
4. 清空项目缓存
Symfony的注解缓存可能导致配置修改不生效,执行缓存清理命令:
php bin/console cache:clear
5. 验证数据存在性
如果上述配置均正确,确认你请求时传入的id参数在数据库recipe表中存在对应记录,设置了软删除的记录也会导致ParamConverter查询失败。
内容的提问来源于stack exchange,提问作者Xehanorth
相关产品推荐
相关产品推荐

