PhalconでPaginate(ページング)対応をする

Phalcon,PHPPaginate,ページング

 

この記事の目次

ドキュメント

Phalconのドキュメントを参照しました。
英語はクッソ苦手ですが、コードを見れば何とかなります。

手順

まずはページングを実装したいコントローラーで、Phalconに標準装備されている名前空間を使います。

use Phalcon\Paginator\Adapter\Model as PaginatorModel; 

その後はPaginatorModelクラスをインスタンス化して使用しましょう。


$currentPage = $this->request->getQuery('page');    //URLパラメータに'page'を設定し、GETで取得

$robots = Robots::find();    //ここでデータを取得

$paginator = new PaginatorModel(
    [
        "data"  => $robots,         //取得した情報
        "limit" => 10,              //ページングで区切る件数
        "page"  => $currentPage,    //現在のページ
    ]
);

$page = $paginator->getPaginate();    //ページングした情報を取得

$this->view->setVar('page', $page);    //ページングした情報をviewに渡す

viewファイルはvolt記法で以下のようにループで回せます。

{% for item in page.items %}
    <tr>
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.type }}</td>
    </tr>
{% endfor %}

次のページへ遷移するリンクは以下でOKです。

{{linkTo("index/index?page=" ~ page.next, "»次へ")}}