3

CategoryREST API に使用するエンティティのコレクションPresentation(以下を参照) を使用して、 JSON エンティティにシリアル化したいと考えています。

エンドポイントは次のようになります/api/v1/categories/1

データセットが小さく、Category関連するものが 5 ~ 10 個しかないPresentations場合、結果の応答はそれほど大きくありません。ただし、Category100 または 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);
}
4

1 に答える 1