Problème pagination Knp Bundle

NathalieJ -  
jordane45 Messages postés 38486 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 :

  @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

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
Il semble que tu n'aies pas renseigné le yaml .
Il faut remplacer les valeurs par ce que tu souhaites non ?

0
NathalieJ
 
Bonjour,

Je ne vois pas ce qu'il y a à remplacer pour afficher un post par page ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Pourtant tu te marquer en commentaire à côté de chaque ligne de code
0
NathalieJ
 
Oui mais a aucun endroit de ce fichier on indique qu'il faut 1 post par page.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ah non. En effet.
Alors la... Bonne question
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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