首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JMSSerializerBundle:按属性指定组

JMSSerializerBundle:按属性指定组
EN

Stack Overflow用户
提问于 2012-12-02 08:50:12
回答 1查看 446关注 0票数 1

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

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

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

代码语言:javascript
运行
复制
/**
 * @var SCA\APIBundle\Entity\User
 * @Groups({"list" => "list", "details" => "list"})
 */
private $author;

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

我怎么才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-12 19:13:53

它不应该在合成的对象上完成,而应该在合成上完成。

在你的例子中,我假设你有类似的东西:

代码语言:javascript
运行
复制
class Article
{
    /**
     * @var User
     * @Groups({"list", "details"})
     */
    private $author;
}


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

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

它会变成:

代码语言:javascript
运行
复制
class Article
{
    /**
     * @var User
     * @Groups({"list", "details"})
     */
    private $author;
}


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

如果你需要更多的控制,你可以定义更明确的组,比如“文章列表”,“用户名字”,“用户列表最小化”等等。

由您决定采用哪种最佳策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13665369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档