如何通过JMS / Serializer只为一个方法公开属性?

时间:2017-12-06 07:40:16

标签: symfony-2.3 jmsserializerbundle

我在Symfony projuect中使用JMS序列化程序,我对此有疑问。我想要只从一个特定的方法(一个路由)暴露实体的属性,在其他情况下我不希望暴露这个属性。我会很感激任何建议)

1 个答案:

答案 0 :(得分:1)

您可以使用属性上的@Groups注释来实现此目的,然后告诉序列化程序在控制器中序列化哪些组。

use JMS\Serializer\Annotation\Groups;

class BlogPost
{
    /** @Groups({"list", "details"}) */
    private $id;

    /** @Groups({"list", "details"}) */
    private $title;

    /** @Groups({"list"}) */
    private $nbComments;

    /** @Groups({"details"}) */
    private $comments;

    private $createdAt;
}

然后:

use JMS\Serializer\SerializationContext;

$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('list')));

//will output $id, $title and $nbComments.

$serializer->serialize(new BlogPost(), 'json', SerializationContext::create()->setGroups(array('Default', 'list')));

//will output $id, $title, $nbComments and $createdAt.

更多信息here