スレ立ててしまった。
”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だから正しいといえば正しいのだが・・・。
近しい症状で、このエントリに書いてある方法で解決できたよと申されるのだが、なぜか僕はダメだった。日頃の行いが悪いんだろう。
意地になって半日近くcakeのソースを追いかけていったんだが、pagination関連は結構複雑なので(色んなHelperが絡むから)段々心が折れてきた頃に、
「もういいや・・・。所詮文字列だったら置換すればいいや・・・・。あはは・・・。」
という悟りを開いたので、
<?php $str = $paginator->numbers(); $url = str_replace("/items/mobile_category/","/m/items/category/",$str); echo $url;
というパッチを当てて逃げた。
良いこのみんなは真似しないほうがいいと思います。