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
Réponse acceptée

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
Auteur

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