Problème pagination Knp Bundle
NathalieJ
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'essaie de mettre en place une pagination dans le cadre de mon projet PHP/Symfony et en utilisant KNP Bundle. Problème : alors qu'il ne devrait y avoir qu'un post par page, je vois la totalité des posts sur chaque page.
TacheController :
TacheRepository :
Knp_paginator.yaml:
EDIT : Correction des ballises de code. Ajout du LANGAGE pour avoir la COLORATION SYNTAXIQUE
J'essaie de mettre en place une pagination dans le cadre de mon projet PHP/Symfony et en utilisant KNP Bundle. Problème : alors qu'il ne devrait y avoir qu'un post par page, je vois la totalité des posts sur chaque page.
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 : Correction des ballises de code. Ajout du LANGAGE pour avoir la COLORATION SYNTAXIQUE
3 réponses
-
Bonjour,
Il semble que tu n'aies pas renseigné le yaml .
Il faut remplacer les valeurs par ce que tu souhaites non ?
-
-
-
- Au niveau du controller tu sembles bien avoir mis les bons paramètres pourtant sauf pour le premier paramètre...
Il faut mettre la requête sql .. pas le résultat de la requête$pagination = $paginator->paginate( $query, /* query NOT result */ $request->query->getInt('page', 1), /*page number*/ 1 /*limit per page*/ );
Dans la doc tu as un exemplepublic function listAction(EntityManagerInterface $em, PaginatorInterface $paginator, Request $request) { $dql = "SELECT a FROM AcmeMainBundle:Article a"; $query = $em->createQuery($dql); $pagination = $paginator->paginate( $query, /* query NOT result */ $request->query->getInt('page', 1), /*page number*/ 10 /*limit per page*/ ); // parameters to template return $this->render('article/list.html.twig', ['pagination' => $pagination]); }
-