Problème pagination Knp Bundle

Fermé
NathalieJ - Modifié le 26 avril 2021 à 10:05
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 26 avril 2021 à 11:58
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 :

  @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
A voir également:

3 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
26 avril 2021 à 10:06
Bonjour,
Il semble que tu n'aies pas renseigné le yaml .
Il faut remplacer les valeurs par ce que tu souhaites non ?

0
Bonjour,

Je ne vois pas ce qu'il y a à remplacer pour afficher un post par page ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
26 avril 2021 à 11:04
Pourtant tu te marquer en commentaire à côté de chaque ligne de code
0
Oui mais a aucun endroit de ce fichier on indique qu'il faut 1 post par page.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 26 avril 2021 à 11:22
Ah non. En effet.
Alors la... Bonne question
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
26 avril 2021 à 11:58
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 exemple
public 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]);
}
1