我想用实体Category
集合Presentation
(见下文)序列化为 JSON 实体以用于 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 页”
甚至可以与offset
and一起使用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;
// ...
}
附言。我知道,例如,如果我想始终获取集合的前@VirtualProperty
5 个元素,我可以添加 created并切片学说ArrayCollection
,如下所示。但是这里的问题是我不能将偏移参数传递给这个方法。因为它会被 JMSSerializer 在某处内部调用......
/**
* @JMS\VirtualProperty()
*
*/
public function getFirstFivePresentations(){
return $this->presentations->slice(0,5);
}