我正在使用Symfony2和JMSSerializerBundle来构建API。 JMSSerializer提供的用于设置使用组序列化对象的不同方法的系统非常有用,但是,我错过了一种方法来指定要在每个参数中序列化哪个组。例如:
我有一篇与用户(作者)相关的文章。文章和用户可以序列化为“列表”或“详细信息”,但是,我希望将用户序列化为“列表”,始终从文章中检索它们(因为“详细信息”组保留用于获取用户而不仅仅是用户)。问题是,如果我将序列化程序设置为“详细信息”,那么作者也会被序列化为“详细信息”。
在我看来,代码应该是这样的:
/**
* @var SCA\APIBundle\Entity\User
* @Groups({"list" => "list", "details" => "list"})
*/
private $author;
其中数组的键指示父级应该序列化的方式,值表示子级的序列化方式。
有什么线索我能做到这一点吗?
答案 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”等。
由您决定采用的最佳策略。