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

我有 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');


尚方宝剑之说
浏览 125回答 1
1回答

潇潇雨雨

您应该看看JMS Serializer,它是一个用于序列化对象的强大库,您可以通过配置哪些字段应该保留在序列化过程中,轻松地在实体上使用 @Groups 注释来完成您的要求。书.phpuse JMS\Serializer\Annotation\Groups;class Book {  /** @Groups({"Concise"}) */  private $id;  /** @Groups({"Concise"}) */  private $name;  /** @Groups({"Concise"}) */  private $authors;  ...}如果您只想在序列化图书实体时检索作者姓名,只需在姓名字段上添加@Groups 注释。作者.phpuse 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);
打开App,查看更多内容
随时随地看视频慕课网APP