Problème pagination Knp Bundle
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
-
ModérateurBonjour,
Il semble que tu n'aies pas renseigné le yaml .
Il faut remplacer les valeurs par ce que tu souhaites non ?
-
Bonjour,
Je ne vois pas ce qu'il y a à remplacer pour afficher un post par page ? -
Oui mais a aucun endroit de ce fichier on indique qu'il faut 1 post par page.
-
-
Modérateur@jordane45Au 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]); }
-