我希望序列化为JSON实体Category
,其中包含Presentation
个实体(见下文),以用于REST API。
端点看起来像这个/api/v1/categories/1
当数据集较小且Category
仅有5-10个相关Presentations
时,结果响应不会太大。然而,当Category
开始让我们说100或200相关Presentations
时,显然我不想返回所有这些,但是想要" paginate"结果,例如。在调用端点时:
/api/v1/categories/1?page=2
- 仅返回"第二页"
/api/v1/categories/1/page=3
- 将返回"第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);
}
答案 0 :(得分:0)
您正在尝试在REST API中实现不正确的方法。每个实体都必须拥有自己的路径。
正确的方法是有两个不同的端点:
rat_id rating_comment created_at id
18 superb developer 2016-02-19 18:26:54 82
9 james to manoj-joshi 2016-02-19 16:42:17 84
50 james to prem 2016-02-19 13:05:30 83
- >序列化类别没有演示文稿
/api/v1/categories/1
- >连续的展示集合
在这里你应该使用分页
/api/v1/categories/1/presentations