我有一个实体,它有一个指向同一类型的另一个对象的属性,比如标记为现有实体副本的实体的duplicatedFrom
。
实体类是这样的:
class Foo
{
private string $id;
private string $name;
private string $content;
private ?Foo duplicatedFrom;
}
我希望返回的结果类似于:
{
"@id": "/api/foo/2",
"@type": "Foo",
"name": "bar",
"content": "abce",
"duplicatedFrom": "/api/foo/1"
}
但我得到的却是:
{
"@id": "/api/foo/2",
"@type": "Foo",
"name": "bar",
"content": "abce",
"duplicatedFrom": {
"@id": "/api/foo/1",
"@type": "Foo",
"name": "bar",
"content": "abce",
"duplicatedFrom": null
}
}
Foo::duplicatedFrom
的实体引用是完全序列化的,我希望只使用id值,而不是整个实体。
我一直在玩串行器配置,将duplicatedFrom
的max-depth
设置为0
或1
,但结果是一样的。
应用的序列化程序组:
<serializer xmlns="http://symfony.com/schema/dic/serializer-mapping">
<class name="Foo">
<!-- rest of the declaration omitted -->
<!-- tried with max-depth 1 and 0 -->
<attribute name="duplicatedFrom" max-depth="1">
<group>foo_item</group>
<group>foo_collection</group>
</attribute>
</class>
</serializer>
api资源配置:
<resources xmlns="https://api-platform.com/schema/metadata">
<resource class="Foo">
<attribute name="normalization_context">
<attribute name="groups">
<attribute>foo_collection</attribute>
</attribute>
</attribute>
</resource>
我怎样才能做到这一点?
我不明白为什么用注释不能实现这一点。您可以使用所需的group创建另一个getter,而不是将group绑定到确切的属性。
例如:
/**
* @Groups({"foo"})
*/
private ?Foo duplicatedFrom;
你可以做一些类似的事情:
私人?Foo复制自;
/**
* @Groups({"foo"})
*/
public function getDuplicatedFromId(): ?string
{
return $this->getDuplicatedFrom()->getId();
}
我知道这不是最好的方法,但可能会有所帮助。