gpt4 book ai didi

php - 如何使用 JMS Serializer 序列化 ArrayCollection 的切片?

转载 作者:搜寻专家 更新时间:2023-10-31 21:54:18 25 4
gpt4 key购买 nike

我想将 Presentation 实体(见下文)的集合序列化为 JSON 实体 Category 以用于 REST API。

端点看起来像这样 /api/v1/categories/1

当数据集较小且 Category 只有 5-10 个相关的 Presentations 时,生成的响应不会太大。但是,当 Category 开始有 100 或 200 个相关的 Presentations 时,显然我不想返回所有这些,但想对结果进行“分页”,例如.调用端点时:

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

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

甚至可以使用 offsetlimit:

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

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

/**
* @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;


// ...

}

附言。我知道,例如,如果我想始终获取集合中的 5 个元素,我可以添加已创建的@VirtualProperty 并切片学说ArrayCollection如下所示。但是这里的问题是我不能将偏移量参数传递给这个方法。因为它会在某处由 JMSSerializer 内部调用...

/**
* @JMS\VirtualProperty()
*
*/
public function getFirstFivePresentations(){
return $this->presentations->slice(0,5);
}

最佳答案

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

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

/api/v1/categories/1 -> 序列化类别没有介绍

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

这里你应该使用分页

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

关于php - 如何使用 JMS Serializer 序列化 ArrayCollection 的切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com