是否正在序列化具有引用相同类型实体的属性的实体



我有一个实体,它有一个指向同一类型的另一个对象的属性,比如标记为现有实体副本的实体的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值,而不是整个实体。

我一直在玩串行器配置,将duplicatedFrommax-depth设置为01,但结果是一样的。

应用的序列化程序组:

<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();
}

我知道这不是最好的方法,但可能会有所帮助。

相关内容

  • 没有找到相关文章

最新更新