Problema de paginación Knp Bundle
NathalieJ
-
jordane45 Mensajes publicados 30426 Fecha de registro Estado Moderador Última intervención -
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 :
TacheRepository :
Knp_paginator.yaml:
EDIT : Corrección de las etiquetas de código. Añadido el LENGUAJE para tener la COLORACIÓN SINTÁCTICA.
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
-
Hola,
Parece que no has proporcionado el yaml.
¿No deberías reemplazar los valores por lo que deseas?
--
.
Atentamente,
Jordane -
-
Sí, pero en ninguna parte de este archivo se indica que debe haber 1 publicación por página.
-
- 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 ejemplopublic 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]); }
-