我正在使用Symfony2和JMSSerializerBundle来构建一个API。JMSSerializer提供的用来设置使用组序列化对象的不同方法的系统非常有用,然而,我缺少一种方法来指定您希望在每个参数中序列化哪个组。示例:
我有一篇与用户(作者)相关的文章。文章以及用户可以被序列化为“列表”或“详细信息”,但是,我希望用户总是被序列化为“列表”,以确保它们是从文章中检索的(因为“详细信息”组被保留用于获取用户,并且仅用于获取用户)。问题是,如果我将序列化程序设置为"details",那么作者也会被序列化为"details“。
在我看来,代码应该是这样的:
/**
* @var SCA\APIBundle\Entity\User
* @Groups({"list" => "list", "details" => "list"})
*/
private $author;其中,数组的键指示父级的序列化方式,值指示子级的序列化方式。
我怎么才能做到这一点呢?
发布于 2012-12-12 19:13:53
它不应该在合成的对象上完成,而应该在合成上完成。
在你的例子中,我假设你有类似的东西:
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;
}如果你需要更多的控制,你可以定义更明确的组,比如“文章列表”,“用户名字”,“用户列表最小化”等等。
由您决定采用哪种最佳策略。
https://stackoverflow.com/questions/13665369
复制相似问题