PagerfantaがSymfony2に最適なページネーションプラグインであることを読みましたが、正しく機能させるのに問題があります。WhiteOctober Github readmeファイルとこのチュートリアルの説明に従って、pagerfantaとPagerfantaBundleのコードをダウンロードしてインストールしました。コントローラのコードは問題ないと確信していますが、テンプレートファイルに問題があります。
私のコントローラーコード:
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,
));
}
私のテンプレートでは:
...
<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 %}
このページに移動すると、最初の10個のオブジェクトのリストが表示されます。ただし、ページャーのレンダリングは1つの単語としてPreviousNextになります(リンクではなく、ページ1、2、3などはありません)。
URLに追加?page=2
すると、リスト内の次の10項目が表示されません。
ドキュメントに次のように記載されているため、ページネーションコードを追加する前のルートから変更しませんでした。
ルートは、変数「page」を使用して現在のルートに対して自動的に生成され、ページ番号が伝達されます。
...しかし、間違ったルーティングが問題の一部であるかどうか疑問に思います。これが事実であると仮定すると、私はこれをどのように進めるかわかりません。
上記でリンクした他のソースからの指示を見つけることができなかったので、これを正常に実装した誰かがそれをどのように行ったかの詳細を共有できれば素晴らしいと思います。