La pagination avec Symfony
Il y a moins de 3 mois, j'ai évoqué la pagination avec CakePHP.
Cette fois-ci je vais expliquer la pagination avec Symfony2.
Contrairement à CakePHP ou la pagination est intégrée en native, avec Symfony il faut pour l' instant passer par un téléchargement d'un bundle.
Le bundle à télécharger est le KnpPaginatorBundle.
https://github.com/KnpLabs/KnpPaginatorBundle
On peut lui reprocher d'être trop lourd et peu performant quand on veut charger beaucoup d'articles dans un blog.
Mais c'est surement la manière la plus simple pour avoir une pagination efficace pour son blog.
Je ne reviens pas sur l' installation du bundle. Tout est indiqué dans la doc.
Une fois fait cela il faut aller dans app\config\config.yml afin de déclarer et configurer le bundle.
Je vous donne ma configuration:
knp_paginator: page_range: 5
default_options:
sort_field_name: sort
sort_direction_name: direction
distinct: true
template:
pagination: AstuceinfoBlogBundle:Blog:twitter_bootstrap_v3_pagination.html.twig
sortable: AstuceinfoBlogBundle:Blog:sortable_link.html.twig
Puis dans le contrôleur on récupère la liste de tous les articles et on fait appelle au service "knp_paginator"
On appelle la methode paginate
Voici mon code :
<? $articles = $this->getDoctrine()
->getManager()
->getRepository('MonblogBlogBundle:Article')
->findBy(array(),array('id' => 'DESC'));
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$articles,
$this->get('request')->query->get('page', 1),
5 // nombre d'' article par page
);
// L'appel de la vue ne change pas
return $this->render('MonblogBlogBundle:Blog:index.html.twig', array(
'pagination' => $pagination)); ?>
Puis dans la vue on fait appelle à la variable pagination afin d' obtenir notre pagination {{ knp_pagination_render(pagination) }}
Voilà la manière de réaliser très simplement un pagination sous symfony 2 en espérant dans une future version de Symfony un système de pagination en native intégréé au Framework comme pour CakePHP
Tweet
PHP Symfony Pagination