[Tips] Paginer avec Symfony2 et Doctrine2
2013, Aug 01
Lorsque l’on crée un site, le « problème » de la pagination apparait souvent. J’ai souvent vu dans des projets Symfony2 les personnes utiliser le bundle de KNP KnpPaginatorBundle (Repo Github).
Le problème de ce bundle est qu’il charge et hydrate tout les objets avant de faire la pagination. Ça va si vous n’avez pas beaucoup d’items, mais avec un très gros volume … c’est très loin d’être le top.
Je vous propose une autre solution, bien plus efficace et propre à mon goût. Il s’agit d’utiliser le paginator de Doctrine2.
Pour cela, ce n’est pas très compliqué. Il vous faut passer par le Query builder, et ajouter (dans votre Repository bien sûr) :
1 2 3 4 |
$query->setFirstResult(($page-1) * $nombreParPage) ->setMaxResults($nombreParPage); return new Paginator($query); |
Une fois ceci fait, dans votre vue (Twig)
{% for p in range(1, nombrePage) %}
<li{% if p == page %} class="active"{% endif %}>
<a href="{{ path('sdzblog_accueil', {'page': p}) }}">{{ p }}</a>
</li>
{% endfor %}
Et voilà, Enjoy !