Problème pagination Knp Bundle
NathalieJ
-
jordane45 Messages postés 40050 Statut Modérateur -
jordane45 Messages postés 40050 Statut Modérateur -
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
A voir également:
- Knp paginator filter
- Photo filter 7 - Télécharger - Retouche d'image
- Microsoft windows search filter host - Forum Windows
- Keyboard filter 01 - Forum Clavier
- Echec de filter imprimante - Forum Imprimante
- &Quot;échec de filter" epson mac ✓ - Forum MacOS
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 ?
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
Dans la doc tu as un exemple
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]);
}