読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

prefix利用時のpaginatorの吐くURLについての駄文

CakePHP

スレ立ててしまった。

”Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない” フォーラム - CakePHP Users in Japan

prefixをroute.phpに設定して携帯用のActionを振り分けるっていうのはみんなやっていると思うのですが、pagintorヘルパーを使うと、prefixつきのActionがそのまま吐き出され、prefixがついたActionは直接アクセスできないのでエラーになって涙目という状況になってしまいました。

<?php
//routes.php
Router::connect('/m/', array('layout'=>'mobile','controller' => 'mobile', 'action' => 'index', 'm_home'));
Router::connect('/m/:controller/:action/*', array('prefix' => 'mobile','layout'=>'mobile'));

ってやってる時に、

//適当なView
<?php
 $paginator->numbers(true);

こんな感じで吐き出すと、

「/m/hoge/category」ではなく「/hoge/mobile_category」というリンクを吐くという話。確かにAction名はmobile_categoryだから正しいといえば正しいのだが・・・。

近しい症状で、このエントリに書いてある方法で解決できたよと申されるのだが、なぜか僕はダメだった。日頃の行いが悪いんだろう。

携帯ルーティング設定している時のpaginator

意地になって半日近くcakeのソースを追いかけていったんだが、pagination関連は結構複雑なので(色んなHelperが絡むから)段々心が折れてきた頃に、

「もういいや・・・。所詮文字列だったら置換すればいいや・・・・。あはは・・・。」

という悟りを開いたので、

<?php
  $str = $paginator->numbers();
  $url = str_replace("/items/mobile_category/","/m/items/category/",$str);
  echo $url;

というパッチを当てて逃げた。

良いこのみんなは真似しないほうがいいと思います。