Was ist die richtige Art und Weise zu verwenden Pagerfanta für Paginierung in Symfony2

Habe ich gelesen, dass Pagerfanta ist die Paginierung plugin der Wahl für Symfony2, aber ich bin mit einigen Schwierigkeiten, es einwandfrei zu arbeiten. Heruntergeladen habe ich den code für pagerfanta und PagerfantaBundle und installiert Sie wie beschrieben in die WhiteOctober Github-readme-Datei und in dieses tutorial. Ich bin mir ziemlich sicher, dass der code in meinen controller ist okay, aber es ist etwas falsch mit meiner template-Datei.

Mein controller code:

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,
    ));
}

In meinem 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 %}

Wenn ich auf die Seite, erhalte ich eine Liste der ersten 10 Objekte. Allerdings,die Darstellung der pager ist nur Vorherigenächste als ein Wort (keine links und keine Seiten 1, 2, 3, etc).

Wenn ich ?page=2 zu der URL, es nicht angezeigt wird die nächsten 10 Elemente in der Liste.

Ich nicht ändern, die route von dem, was war, bevor ich Hinzugefügt, die Seitenzahlen, Codes, da die Dokumentation sagt:

Die Routen werden automatisch generiert, für die aktuelle route mit der variable "Seite" zu propagieren und die Seitenzahl.

... aber ich Frage mich, wenn fehlerhafte routing ist Teil des Problems. Wenn dies der Fall ist, ich bin nicht sicher, wie gehen Sie mit diesem.

Ich nicht in der Lage waren, alle Anweisungen in anderen Quellen habe ich im Zusammenhang mit oben, also wäre es toll, wenn jemand, der dies erfolgreich umgesetzt hat, könnten die details von, wie Sie es Taten.

  • Führt Sie die route-Muster gehören ein page-Attribut ? ie /articles/{page}
  • Update: Es scheint sich um ein problem mit dem controller. Insbesondere die DocrtineORMAdapter funktioniert nicht richtig (ich.e $pagerfanta->getNbResults() 0 zurück - daher keine Seiten zwischen Prevous und Weiter) . Die Dokumentation besagt, dass die parameter an den Konstruktor übergeben werden können, eine Abfrage oder eine QueryBuilder, aber ich vermute, nur letzteres ist richtig. Wenn ich auf $pagerfanta = new Pagerfanta(new ArrayAdapter($query->getResult()) es gibt die richtige Anzahl der Ergebnisse. @AdrienBrault - ich habe die änderung, die Sie vorgeschlagen, um die route-Muster und jetzt funktioniert es, aber sollte nicht erforderlich sein.
  • Also ich bin immer noch mit den Fragen, warum das ?Seite= wird nicht automatisch Hinzugefügt, um die Strecke gemäß den Unterlagen und warum das css nicht angewandt wird (nun der paginator sieht aus wie Previous123Next, ohne Leerzeichen oder Formatierung)
InformationsquelleAutor j_goldman | 2012-09-10
Schreibe einen Kommentar