首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ArrayCollection序列化器序列化片?

如何使用ArrayCollection序列化器序列化片?
EN

Stack Overflow用户
提问于 2016-02-03 14:52:42
回答 1查看 1.1K关注 0票数 3

我希望序列化为JSON Category,其中包含Presentation实体集合(参见下文),用于REST。

端点将类似于下面的/api/v1/categories/1

当数据集很小时,当Category只有5-10相关的Presentations时,则结果响应不会太大。然而,当Category开始有100或200个相关的Presentations时,显然我不想全部返回,而是想“分页”结果,例如。调用端点时:

/api/v1/categories/1?page=2 -只返回“第二页”

/api/v1/categories/1/page=3 -将返回“第三页”

甚至可以与offsetlimit一起使用

/api/v1/categories/1?offset=20&limit=10

但问题是:如何使JMS序列化程序只序列化集合的一部分?

代码语言:javascript
复制
/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository")
 */
class Category
{

    /**
     * @var string
     * @ORM\Column(type="string")
     * @JMS\Expose()
     * @JMS\Groups({"get-category"})
     */
    private $title;


    // ...

    /**
     * @var ArrayCollection
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Presentation", mappedBy="categories", fetch="EXTRA_LAZY")
     * @JMS\Groups({"get-category"})
     * @JMS\Expose()
     */
    private $presentations;


    // ...

}

ps。我知道,例如,如果我想始终获得集合的第一个5元素,我可以添加已创建的@VirtualProperty并切片理论ArrayCollection,如下所示。但是这里的问题是,我不能将偏移量参数传递给这个方法。在某个地方被JMSSerializer内部称为..。

代码语言:javascript
复制
/**
 * @JMS\VirtualProperty()
 *
 */
public function getFirstFivePresentations(){
    return $this->presentations->slice(0,5);
}
EN

回答 1

Stack Overflow用户

发布于 2016-02-22 07:13:13

您正在尝试在REST中实现不正确的方法。每个实体都必须有自己的路径。

正确的方法是有两个不同的端点:

/api/v1/categories/1 ->序列化类别,没有演示文稿

/api/v1/categories/1/presentations ->序列化的演示文稿集合

在这里你应该使用分页

/api/v1/categories/1/presentations?offset=20&limit=10

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

https://stackoverflow.com/questions/35180269

复制
相关文章

相似问题

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