JMSSerializerBundle:指定每个属性的组

时间:2012-12-02 00:50:12

标签: php symfony jmsserializerbundle

我正在使用Symfony2和JMSSerializerBundle来构建API。 JMSSerializer提供的用于设置使用组序列化对象的不同方法的系统非常有用,但是,我错过了一种方法来指定要在每个参数中序列化哪个组。例如:

我有一篇与用户(作者)相关的文章。文章和用户可以序列化为“列表”或“详细信息”,但是,我希望将用户序列化为“列表”,始终从文章中检索它们(因为“详细信息”组保留用于获取用户而不仅仅是用户)。问题是,如果我将序列化程序设置为“详细信息”,那么作者也会被序列化为“详细信息”。

在我看来,代码应该是这样的:

/**
 * @var SCA\APIBundle\Entity\User
 * @Groups({"list" => "list", "details" => "list"})
 */
private $author;

其中数组的键指示父级应该序列化的方式,值表示子级的序列化方式。

有什么线索我能做到这一点吗?

1 个答案:

答案 0 :(得分:0)

不应该在组合对象上进行,而是在组合上进行。

在你的情况下,我想你有类似的东西:

class Article
{
    /**
     * @var User
     * @Groups({"list", "details"})
     */
    private $author;
}


class User
{
    private $firstName;
    private $lastName;
}

因此,如果要在序列化组合对象时公开firstName属性,则需要在User对象中定义相同的组。

变成:

class Article
{
    /**
     * @var User
     * @Groups({"list", "details"})
     */
    private $author;
}


class User
{
    /*
     * @Groups({"list"})
     */
    private $firstName;
    private $lastName;
}

如果您需要更多控制,您可以定义更明确的组,例如“article-list”,“user-firstname”,“user-list-minimal”等。

由您决定采用的最佳策略。