Symfony4 API Platform配置Groups注解后关联字段仍返回IRI问题
问题排查解决步骤
第一步:先解决AUDFieldType接口无自定义字段返回的问题
该现象说明你配置的field:read序列化组完全未生效,按顺序排查以下配置:
- 清除Symfony注解缓存
执行命令:
开发环境也会因为注解缓存导致新增的注解不生效,优先执行该操作验证。php bin/console cache:clear - 确认序列化注解功能已开启
检查config/packages/framework.yaml中是否存在以下配置:
若未开启framework: serializer: enable_annotations: trueenable_annotations,所有@Groups注解都会被忽略。 - 核对注解导入是否正确
确认两个实体中导入的Groups类为:
不要误导入Doctrine等其他命名空间下的同名注解。use Symfony\Component\Serializer\Annotation\Groups; - 检查全局API Platform配置是否冲突
查看config/packages/api_platform.yaml中是否配置了全局的normalization_context,如果存在全局序列化组配置,要么把field:read加入全局组列表,要么删除全局配置让实体级的配置生效。
第二步:解决关联字段返回IRI而非嵌套对象的问题
当AUDFieldType接口可以正常返回id、name字段后,如果AUDField接口中的type字段还是返回IRI,是因为API Platform默认对关联的API资源优先返回IRI,需要额外配置强制嵌套序列化:
- 修改AUDField的
@ApiResource注解,开启max_depth支持:/** * @ApiResource( * normalizationContext={ * "groups"={"field:read"}, * "enable_max_depth"=true * }, * ) */ - 给关联的
type属性加@MaxDepth注解:use Symfony\Component\Serializer\Annotation\MaxDepth; // ... /** * @ORM\ManyToOne(targetEntity=AUDFieldType::class) * @ORM\JoinColumn(nullable=false) * @Groups({"field:read"}) * @MaxDepth(1) */ private $type;
如果需要attributesTypes字段也返回嵌套对象,按同样的方式给该属性加@MaxDepth注解即可。
内容的提问来源于stack exchange,提问作者Bastien Cgn
相关产品推荐
相关产品推荐

