Probleme pour faire Pagination

Par Malaury, il y a 4 ans


bonjour à tous ! je suis entrain de creer un service API avec symfony (v5.3)
je cherche à faire sans bundler une pagination et j'utilise POSTMAN.

Voici mon controller, ma function index, j'ai bien la liste mais toute la liste et non 7 per page!

* @Route("/phone") * */ class PhoneController extends AbstractController { /** * @Route("/index/{page}", requirements={"page" = "\d+"}, name="phone_index", methods={"GET"}) * * @param int $page Le numéro de la page */ public function index(Request $request, PhoneRepository $phoneRepository, SerializerInterface $serializer): Response { $page = $request->query->get('page'); if (is_null($page) || $page < 1) { $page = 1; } $phones = $phoneRepository->findAllPhones($page, getenv('MAX')); //$data = $serializer->serialize($phones,'json'); return $this->json($phones, Response::HTTP_OK, [ 'groups' => [ 'phone:list' ] ]); /*return new Response($data, 200, [ 'Content-Type' => 'application/json' ]);*/ } ``` voici mon repo: class PhoneRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Phone::class); } //2 parametres, 2 valeurs dans la methode soit la page et maximum 7 per page public function findAllPhones($page, $max) { if (!is_numeric($page)) { throw new InvalidArgumentException( 'La valeur de l\'argument $page est incorrecte (valeur : ' . $page . ').' ); } if ($page < 1) { throw new NotFoundHttpException('La page demandée n\'existe pas'); } if (!is_numeric($max)) { throw new InvalidArgumentException( 'La valeur de l\'argument $max est incorrecte (valeur : ' . $max . ').' ); } $query = $this->createQueryBuilder('pg') //genere ma requete ma page ->getQuery() // obtient la page ->setFirstResult(($page - 1)* $max) // affectation du resultat ->setMaxResults($max); // tu m'affectes 7 requetes tel max return new Paginator($query); } } je comprends pas ce que j'ai raté ! merci pour votre aide

2 réponses

gillesr, il y a 4 ans

Bonjour,

ton getQuery est fait avant, donc ton setFirstResult et ton setMaxResults sont appliqués sur la query et non sur le QueryBuilder.
Essaie de faire le getQuery en dernier pour voir.

Malaury, il y a 4 ans

yes merci ca marche !! !des fois vraiment!!!! je suis restee jusqu'à 1h du mat entrain de chercher une parenthese en trop !!! et je l'ai vu que ce matin :) lol
merci bcp