Pracuję nad projektem Symfony2 i postanowiłem użyć KNPPaginatorBundle do zbudowania prostego systemu stronicowania. Stworzyłem więc encję Product i chcę dodać działanie paginatora do indexAction (generowane przez polecenie CRUD).Jak używać KNPPaginatorBundle do dzielenia stron za pomocą repozytorium Doctrine?
// Retrieving products.
$em = $this->getDoctrine()->getManager();
//$entities = $em->getRepository('LiveDataShopBundle:Product')->findAll();
$dql = "SELECT a FROM LiveDataShopBundle:Product a";
$entities = $em->createQuery($dql);
// Creating pagnination
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$entities,
$this->get('request')->query->get('page', 1),
20
);
Działa dobrze, ale chcę użyć repozytorium produktu zamiast tworzyć zapytanie bezpośrednio w kontrolerze. Jak mogę to zrobić ? W rzeczywistości, bezpośrednio dodać zbiór wyników do obiektu paginate jest po prostu zbyt wolny, ponieważ jego ładowanie wszystkich produktów następnie paginacja ArrayCollection.
Z góry dziękuję.
K4
Zauważyłem również tę kwestię wydajności. Problem polega na tym, że ten pakiet potrzebuje całej kolekcji tablic do generowania stronicowania. Jeśli podasz częściowy wynik, paginacja będzie mieć niewłaściwą liczbę stron, ponieważ jest obliczona z całej kolekcji – Chopchop