2012-09-10 7 views
8

PagerfantaはSymfony2のページングプラグインですが、正しく動作させるには問題があります。私はpagerfantaとPagerfantaBundleのコードをダウンロードし、WhiteOctober Github readme filethis tutorialに記載されているようにインストールしました。コントローラのコードは大丈夫ですが、テンプレートファイルに問題があります。Symfony2のページングにPagerfantaを使用する正しい方法

私のコントローラコード:私のテンプレートで

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ワード(リンクではなく、ページ1,2,3などではない)だけのPreviousNextです。

URLに?page=2を追加すると、リストに次の10項目が表示されません。伝播する

をルートが現在のルートのために自動的に生成されている変数を使用して「ページ」:

私は改ページコードを追加する前にドキュメントが言うので、私はしたされているものからのルートを変更していませんページ番号。

...間違ったルーティングが問題の一部であるかどうかは疑問です。これが当てはまると仮定すると、私はこれをどのように進めるべきか分かりません。

私は上にリンクしたソース以外の指示を見つけることができなかったので、これをうまく実装した人が彼らのしたことの詳細を分かち合うことができれば嬉しいです。

+0

はあなたのルートパターンをページ属性が含まれていますか?つまり/ articles/{page} ' – AdrienBrault

+0

更新:コントローラに問題があるようです。具体的には、DocrtineORMAdapterが正常に動作しません。つまり、 '$ pagerfanta-> getNbResults()'は0を返します。したがってPrevousとNextの間にページはありません。ドキュメントには、コンストラクタに渡されるパラメータがQueryまたはQueryBuilderになる可能性があることが記載されていますが、後者のみが正しいと思われます。 '$ pagerfanta = new Pagerfanta(new ArrayAdapter($ query-> getResult())'に変更すると正しい数の結果が返されます@AdrienBrault - あなたがルートパターンに提案した変更を行いました。 –

+0

だから私はまだなぜの質問が残っていますか?page =はドキュメントごとに自動的にルートに追加されず、なぜCSSが適用されないのですか(スペースがないか書式なしでPrevious123Nextのようになりました) –

答えて

6

私はあなたのアプリケーションがコントローラーアクションに対して?page=2を解析する方法を知らないと思います。

あなたのページングルートを(ページ番号@AdrienBraultとして)返信してください。このような

my_index: 
    pattern: /{page} 
    defaults: { _controller: MyTestBundle:Object:index, page: 1 } 
    requirements: 
    _method: GET 
    page: \d+ 

PagerFantaBundleは(私が推測する)正しいルートを推測しようとします。

私のために働きました。

+0

これはうまくいきますが、実際にはクエリパラメータでOPは尋ねた。 '$ request-> get( 'page'、1)から' $ page'を取得するだけです。 – xPheRe

+0

リクエストの 'get'メソッドは、すべての(クエリ、属性、リクエスト)パラメータを処理します。パラメータがどこから来るのか知っているときには避けることが正式に推奨されています:この場合、 '$ request-> query-> get( 'page'、1)'をむしろ使用する必要があります。 –

1

私は自分のルーティングに代わり「ページ」foは「currenPage」を使用しなければならなかったし、私はこれを行う方法を見つけました:

{{ pagerfanta(pager, 'my_pager_view', {'pageParameter':'[currentPage]'}) }}

関連する問題