1

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

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

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

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

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

任何线索我怎样才能做到这一点?

4

1 回答 1

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”等。

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

于 2012-12-12T11:13:52.570 回答