Knp Paginatorを使ってみる

Symfony2

KnpPaginatorというバンドルは、何かを一覧表示する際に1ページに収まりきれなかった
時に、次のページのリンクや、前のページへのリンク、直接のページ番号へのリンクなどを
自動的に出力してくれます。

ダウンロード

以下のページから可能です。
「Download ZIP」というボタンがあるはずなのでそれをクリックすると
ダウンロードできます。
[KnpPaginatorBundle]
https://github.com/KnpLabs/KnpPaginatorBundle

$ unzip KnpPaginatorBundle-master.zip
$ mkdir -p vendor/bundles/Knp/Bundle
$ mv KnpPaginatorBundle-master vendor/bundles/Knp/Bundle/PaginatorBundle

[knp-component]
https://github.com/KnpLabs/knp-components

$ unzip knp-components-master.zip
$ mv knp-components-master vendor/knp-components

インストール

app/autoloader.phpに以下を追加

app/AppKernel.phpに以下を追加

・コントローラにアクションを追加

コントローラに対応するテンプレートの作成

これで、準備完了ですのでアクセスしてみてください。

エラーになった場合

自分の場合そのままでは上記エラーがでて使用できませんでした。

そこで、以下のファイルの、items()メソッド内の一部を修正します。
– ./vendor/knp-components/src/Knp/Component/Pager/Event/Subscriber/Paginate/Doctrine/ORM/QuerySubscriber.php

以下のように修正してみてください。

今回使用したSymfonyは2.0.21で、それと、Knpのバンドルのバージョンが合わなかったのでしょうか?
“./vendor/doctrine/lib/Doctrine/ORM/AbstractQuery.php”のgetParameters()が返すものが
Knpが期待するオブジェクトではなく配列になっているのが原因のようです。
$countQuery->getParameters(); <= 2.0.21だと配列を返している。

追記:最新版のだと”\AsIsHydrator contains 1 abstract method and must therefore…”というエラーがでる

こんな感じのエラー

昔はできたのにどうも最新版だとうまくいかない。
定義が必要な抽象メソッドが定義されていないというエラーらしい。
どう対処していいかわからないので、関連するクラスを呼んでいる処理を前と
同じように修正したら直った。

以下のように修正します。

これで動くようになりました。

タイトルとURLをコピーしました