Php JMSSerializerBundle:为每个属性指定组
我正在使用Symfony2和JMSSerializerBundle构建一个API。JMSSerializer提供的用于设置使用组序列化对象的不同方式的系统非常有用,但是,我缺少一种方法来指定要在每个参数中序列化哪个组。例如: 我有一篇与用户作者相关的文章。文章和用户可以序列化为列表或详细信息,但是,我希望将用户序列化为列表,并始终从文章中检索它们,因为详细信息组保留用于获取用户,而仅用于获取用户。问题是,如果我将序列化程序设置为details,那么作者也会被序列化为details 在我看来,代码应该是这样的:Php JMSSerializerBundle:为每个属性指定组,php,symfony,jmsserializerbundle,Php,Symfony,Jmsserializerbundle,我正在使用Symfony2和JMSSerializerBundle构建一个API。JMSSerializer提供的用于设置使用组序列化对象的不同方式的系统非常有用,但是,我缺少一种方法来指定要在每个参数中序列化哪个组。例如: 我有一篇与用户作者相关的文章。文章和用户可以序列化为列表或详细信息,但是,我希望将用户序列化为列表,并始终从文章中检索它们,因为详细信息组保留用于获取用户,而仅用于获取用户。问题是,如果我将序列化程序设置为details,那么作者也会被序列化为details 在我看来,代码
/**
* @var SCA\APIBundle\Entity\User
* @Groups({"list" => "list", "details" => "list"})
*/
private $author;
其中,数组的键指示父级序列化的方式,值指示子级序列化的方式
有什么线索可以让我做到这一点吗?不应该在合成对象上进行,而应该在合成对象上进行 在你的情况下,我想你有这样的东西:
class Article
{
/**
* @var User
* @Groups({"list", "details"})
*/
private $author;
}
class User
{
private $firstName;
private $lastName;
}
因此,如果要在序列化组合对象时公开firstName属性,则需要在用户对象中定义相同的组
它变成:
class Article
{
/**
* @var User
* @Groups({"list", "details"})
*/
private $author;
}
class User
{
/*
* @Groups({"list"})
*/
private $firstName;
private $lastName;
}
如果您需要更多的控制,您可以定义更显式的组,如文章列表、用户名、用户列表最小值等
由您决定采用的最佳策略。是的,这是我将要使用的解决方案,但我认为应该有其他方法来实现这一点,因为如果您有大量的类,这种方法有点难以维护。@aperezroca,我同意这可能有点违反直觉,但我想这是因为排除策略的工作方式有一些限制