スポンサーリンク

CakePHP2でページネーターのGetパラメータ付きURLをカスタマイズして取得する方法

CakePHP2でページネーターで生成されるURLを取得したかったのですが、はまってしまいました。

Paginator+Searchコンポーネントで生成されたURLは最終的にGetパラメータで取得されます。
URL自体は下記の通りにすると取得できるのですが、一部変更したい場合はどうするのか?

Router::reverse($this->request);

もちろん、正規表現で書き換えはできなくはないけど、ちょっと怖い。
ということで、以下のようにしてみました。

スポンサーリンク

$this->requestを渡しているってことは、これをもとに生成している?

$this->requestを渡しているので、これを書き換えれば変更はできる…はず?
でも、直接書き換えたらまずいことになってしまうので以下のようにしてみました。

下記例では、ページを1ページ目にリセットして、Model.delete=0のGetパラメータを追加しています。

$req = clone $this->request;  //値渡しでオブジェクト生成
$req->params['named']['page']=1;
$req->data['Model']['delete']=0;
$req->query=$req->data['Model'];
$url = Router::reverse($req);
unset($req);  //開放処理

あまりしっくりいかない方法ですが、一応これで最小限の手間で自由にURLを生成できそうです。
スマートかどうかは疑問です。もっといい方法があればプリーズ。
ヘルパー化もできそうですが、今回はべた書きで対応することにします。

スポンサーリンク