Category
REST API に使用するエンティティのコレクションPresentation
(以下を参照) を使用して、 JSON エンティティにシリアル化したいと考えています。
エンドポイントは次のようになります/api/v1/categories/1
データセットが小さく、Category
関連するものが 5 ~ 10 個しかないPresentations
場合、結果の応答はそれほど大きくありません。ただし、Category
100 または 200 の関連があるとしましょうPresentations
。明らかに、それらすべてを返したくはありませんが、結果を「ページ分割」したいと思います。エンドポイントを呼び出す場合:
/api/v1/categories/1?page=2
- 「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;
// ...
}
ps。たとえば、コレクションの最初の5 つの要素を常に取得したい場合は、以下に示すように、created を追加@VirtualProperty
して教義ArrayCollection
をスライスすることができます。しかし、ここでの問題は、オフセット パラメータをこのメソッドに渡すことができないことです。どこかで JMSSerializer によって内部的に呼び出されるため...
/**
* @JMS\VirtualProperty()
*
*/
public function getFirstFivePresentations(){
return $this->presentations->slice(0,5);
}