在序列化实体时手动调用context参数来规范化嵌套对象。
示例代码:
// 定义Book实体
// Book实体中包含Author实体
// 通过@SerializedName注解设定Author的序列化名称
// 通过@ApiSubresource注解将Author标记为子资源
@ApiResource
class Book {
// ...
/**
* @var Author|null
*
* @ORM\ManyToOne(targetEntity="Author")
*
* 注意:这里不能添加Context(null)注释,因为在嵌套对象中有序列化限制
* 以便我们使用 context={"groups"={"book.read"}} 参数覆盖这默认的“book.write”组
*
* @ApiSubresource()
* @SerializedName("written_by")
* @Groups({"book.read", "author.read"})
*/
private $author;
// ...
}
// 定义Author实体
@ApiResource
class Author {
// ...
/**
* @ORM\Column(type="string", length=255)
*
* @Groups({"book.read", "author.read"})
*/
private $name;
// ...
}
// 序列化实体时手动调用 normalization context
$json = $serializer->serialize($book, 'json', [
'circular_reference_handler' => function ($object) {
return $object->getId();
},
'groups' => ['book.read'],
// 通过 context 参数设置规范化上下文
'context' => [
'groups' => ['author.read']
]
]);
下一篇:API平台:如何验证参数?