[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.

Ça rame

Ça rame …

Je vous propose une autre solution, bien plus efficace et propre à mon goût. Il s’agit d’utiliser le paginator de Doctrine2.

Paginons, paginons !

Paginons, paginons !

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 !