CakePHP(v2.x),Paginationのパラメータをクエリストリングとして取得する.

Paginateを利用するときは公式の資料に従って,

class ArticlesController extends AppController
{
    public $paginate = [
        'limit' => 25,
        'order' => [
            'Articles.title' => 'asc'
        ]
    ];

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Paginator');
    }
}

とするかとおもいますが,ここでPaginateに利用されているパラメータをコントローラ内で取得したいケースがあります.(例えばIndexに一覧表示されている状態でそのままCSVとして出力したいときはOrder OptionのDESC,ASCが欲しかったりします.)

こういうときはparamTypeをクエリストリングとして取得するように明示的に書くと,コントローラ側からのPaginateのパラメータへのアクセスが可能になります.

class ArticlesController extends AppController
{
    public $paginate = [
        'limit' => 25,
        'order' => [
            'Articles.title' => 'asc',
            'paramType' => 'querystring', // 追加!!
        ]
    ];

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Paginator');
    }
}

こうすると,例えば現在Articleをタイトル順に並べているかと思いますが,header付近のアイコンを押して昇順・降順を入れ替えたときはURLにdirectionというパラメータが追加されているかと思います. クエリパラメータとしてPaginateのパラメータを取得したとしても特に何も書き加えなくてもPaginateの機能はそのまま有効です.

うまく活用して見てください.