我希望序列化为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 -将返回“第三页”
甚至可以与offset和limit一起使用
/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;
// ...
}ps。我知道,例如,如果我想始终获得集合的第一个5元素,我可以添加已创建的@VirtualProperty并切片理论ArrayCollection,如下所示。但是这里的问题是,我不能将偏移量参数传递给这个方法。在某个地方被JMSSerializer内部称为..。
/**
* @JMS\VirtualProperty()
*
*/
public function getFirstFivePresentations(){
return $this->presentations->slice(0,5);
}发布于 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
https://stackoverflow.com/questions/35180269
复制相似问题