Problema de paginación Knp Bundle

NathalieJ -  
jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   -
Bonjour,
Estoy tratando de implementar una paginación en el marco de mi proyecto PHP/Symfony utilizando KNP Bundle. Problema: aunque debería haber solo un post por página, veo la totalidad de los posts en cada página.

TacheController :

 @Route("/accueil", name="accueil") public function liste(TacheRepository $tacheRepository, CategorieRepository $categorieRepository, Request $request, PaginatorInterface $paginator): Response { $tache = new Tache(); $form = $this->createForm(FiltreFormType::class, $tache); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { if (!empty($form['q']->getData())) { $tache->setTitre($form['q']->getData()); } if (!empty($form['categories']->getData()->getValues())) { foreach ($form['categories']->getData() as $categorie) { $tache->addCategory($categorie); } } } isset($_POST['datedecroissante']) ? $tri = false : isset($_POST['datecroissante']) ? $tri = true : $tri = false; $taches = $tacheRepository->rechercherTache($tache, $tri); $pagination = $paginator->paginate( $taches, $request->query->getInt('page', 1), 1 ); return $this->render('main/accueil.html.twig', ['taches' => $taches, 'categories' => $categorieRepository->findAll(), 'form' => $form->createView(), 'pagination' => $pagination]); }


TacheRepository :

 public function rechercherTache(Tache $tache, $tri) { $qb = $this->createQueryBuilder('t') ->select('t', 'c') ->join('t.categories', 'c'); if (!empty($tache->getTitre())) { $qb = $qb->andWhere('t.titre LIKE :q') ->setParameter('q', "%{$tache->getTitre()}%"); } if (!empty($tache->getCategories()->getValues())) { $qb = $qb->andWhere('c.id IN (:categories)') ->setParameter('categories', $tache->getCategories()); } if ($tri == false) { $qb = $qb->orderBy('t.date_creation', 'DESC'); } else { $qb = $qb->orderBy('t.date_creation', 'ASC'); } return $qb->getQuery()->getResult(); }


Knp_paginator.yaml:
 knp_paginator: page_range: 5 # number of links showed in the pagination menu (e.g: you have 10 pages, a page_range of 3, on the 5th page you'll see links to page 4, 5, 6) default_options: page_name: page # page query parameter name sort_field_name: sort # sort field query parameter name sort_direction_name: direction # sort direction query parameter name distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements filter_field_name: filterField # filter field query parameter name filter_value_name: filterValue # filter value query parameter name template: pagination: '@KnpPaginator/Pagination/twitter_bootstrap_v4_pagination.html.twig' # sliding pagination controls template sortable: '@KnpPaginator/Pagination/sortable_link.html.twig' # sort link template filtration: '@KnpPaginator/Pagination/filtration.html.twig' # filters template 


EDIT : Corrección de las etiquetas de código. Añadido el LENGUAJE para tener la COLORACIÓN SINTÁCTICA.

3 respuestas

  1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
     
    Hola,
    Parece que no has proporcionado el yaml.
    ¿No deberías reemplazar los valores por lo que deseas?

    --
    .
    Atentamente,
    Jordane
    0
  2. NathalieJ
     
    Hola,

    No veo qué hay que reemplazar para mostrar una publicación por página.
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      Sin embargo, te marcas en comentario al lado de cada línea de código.
      0
  3. NathalieJ
     
    Sí, pero en ninguna parte de este archivo se indica que debe haber 1 publicación por página.
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      Ah no. En efecto.
      Entonces... Buena pregunta.
      0
      1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención  
         
        En el nivel del controlador parece que has puesto los parámetros correctos, excepto para el primer parámetro...
        Hay que poner la consulta SQL ... no el resultado de la consulta
         $pagination = $paginator->paginate( $query, /* consulta NO resultado */ $request->query->getInt('page', 1), /* número de página */ 1 /* límite por página */ ); 


        En la documentación tienes un ejemplo
         public function listAction(EntityManagerInterface $em, PaginatorInterface $paginator, Request $request) { $dql = "SELECT a FROM AcmeMainBundle:Article a"; $query = $em->createQuery($dql); $pagination = $paginator->paginate( $query, /* consulta NO resultado */ $request->query->getInt('page', 1), /* número de página */ 10 /* límite por página */ ); // parámetros a la plantilla return $this->render('article/list.html.twig', ['pagination' => $pagination]); } 
        1