Quelle est la façon correcte d'utiliser Pagerfanta pour la pagination dans Symfony2

J'ai lu que Pagerfanta est le plugin pagination de choix pour Symfony2, mais je vais avoir quelques problèmes à la faire fonctionner correctement. J'ai téléchargé le code pour pagerfanta et PagerfantaBundle et installé comme décrit dans la WhiteOctober Github fichier readme et dans ce tutoriel. Je suis sûr que le code dans mon contrôleur est bien, mais il ya quelque chose de mal avec mon fichier de modèle.

Mon code de contrôleur:

public function indexAction($page =  null)
{
    ...
    $query = $em->createQuery('SELECT something FROM some_table');
    $adapter = new DoctrineORMAdapter($query);
    $pager =  new Pagerfanta($adapter);
    $pager->setMaxPerPage(10);
    if (!$page)    $page = 1;
    try  {
        $pager->setCurrentPage($page);
    }
    catch(NotValidCurrentPageException $e) {
      throw new NotFoundHttpException('Illegal page');
    }
    return $this->render('MyBundle:MyEntity:index.html.twig', array(
        'pager' => $pager,
    ));
}

Dans mon template:

...
<table>
  {% for object in pager.currentPageResults %}
    <tr>
      <td>{{ object.attribute1 }}</td>
      <td>{{ object.attribute2 }}</td>
      <td>{{ object.attribute3 }}</td>
    </tr>
  {% endfor %}
</table>

{% if pager.haveToPaginate %}
  {{ pagerfanta(pager) }}
{% endif %}

Quand je vais sur la page, j'obtiens une liste des 10 premiers objets. Toutefois,le rendu de la pager est juste PreviousNext comme un mot (pas de liens et pas les pages 1, 2, 3, etc).

Si j'ajoute ?page=2 à l'URL, il n'affiche pas les 10 éléments dans la liste.

Je n'ai pas changé l'itinéraire de ce que c'était avant, j'ai ajouté la pagination code, car la documentation dit:

Les routes sont générées automatiquement pour le trajet en cours à l'aide de la variable "page" pour propager le numéro de page.

... mais je me demande si il est incorrect de routage est une partie du problème. En supposant que c'est le cas, je ne suis pas sûr de savoir comment procéder à cet égard.

J'ai été incapable de trouver toutes les instructions d'autres sources, j'ai lié ci-dessus, de sorte qu'il serait génial si quelqu'un qui a mis en œuvre avec succès, pourrait partager les détails de la façon dont ils l'ont fait.

Ne vous modèle de route inclure un attribut de la page ? ie /articles/{page}
Mise à jour: Il semble y avoir un problème avec le contrôleur. Plus précisément, le DocrtineORMAdapter ne fonctionne pas correctement (j'.e $pagerfanta->getNbResults() retourne 0 - donc pas de pages entre les Précédents et Suivant) . La documentation indique que le paramètre passé au constructeur peut être une Requête ou d'un QueryBuilder, mais je soupçonne seulement le dernier est correct. Lorsque je change de $pagerfanta = new Pagerfanta(new ArrayAdapter($query->getResult()) elle renvoie le nombre correct de résultats. @AdrienBrault - j'ai fait le changement que vous propose le modèle de route et maintenant ça fonctionne, mais ne devrait pas être nécessaire.
Je suis donc toujours à gauche avec la question de savoir pourquoi l' ?page= n'est pas automatiquement ajouté à la route que par la documentation et pourquoi le css n'est pas appliquée (le paginator ressemble Previous123Next, sans espaces ni de mise en forme)

OriginalL'auteur j_goldman | 2012-09-10