为了账号安全,请及时绑定邮箱和手机立即绑定

如何在symfony中序列化嵌套对象的特定属性?

如何在symfony中序列化嵌套对象的特定属性?

PHP
尚方宝剑之说 2021-11-05 15:45:48
我有 2 个具有多对多关系 Author 和 Book 的实体。现在,当我将 Book 序列化为 json 时,它为我提供了嵌套作者对象的所有字段。{    "id": 3,    "name": "clean code",    "authors": [        {            "id": 4,            "name": "Martin Robert "        },        ...    ]}但是我如何让它只返回特定的字段,例如只返回每个作者的名字。我尝试将组添加到作者实体,但是当我运行序列化程序时,组似乎不适用于嵌套对象,因为我得到了相同的结果。    $book=$this->serializer->normalize($book, null, ['groups' => 'Concise']);    $book=$this->serializer->serialize($book,'json');
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您应该看看JMS Serializer,它是一个用于序列化对象的强大库,您可以通过配置哪些字段应该保留在序列化过程中,轻松地在实体上使用 @Groups 注释来完成您的要求。


书.php


use JMS\Serializer\Annotation\Groups;


class Book {

  /** @Groups({"Concise"}) */

  private $id;


  /** @Groups({"Concise"}) */

  private $name;


  /** @Groups({"Concise"}) */

  private $authors;


  ...

}

如果您只想在序列化图书实体时检索作者姓名,只需在姓名字段上添加@Groups 注释。


作者.php


use JMS\Serializer\Annotation\Groups;


class Author {

  private $id;


  /** @Groups({"Concise"}) */

  private $name;


  private $books;


  ...

}

然后


use JMS\Serializer\SerializerBuilder;

use JMS\Serializer\SerializationContext;



$serializer = SerializerBuilder::create()->build();

$context = SerializationContext::create()->setGroups(array('Concise'));

$json = $serializer->serialize($book, 'json', $context);


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信