.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
15 人のユーザが現在オンラインです。 (14 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 15

もっと...

.
.リンク集

メイン
   CakePHP コントローラ(Controller)
     Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
_gtd
投稿日時: 2009-8-26 17:22
Baker スタート
登録日: 2009-2-1
居住地:
投稿: 8
Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない
お世話になります。cakeのversionは1.2.3.8166です。

routes.phpでこんな感じでprefixを設定しています。


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



/mから始まるURIはprefixを設定してViewのlayoutを携帯用にしている、という設定です。

で、この状態でprefixで設定されているactionでpagintate()すると、

/m/hoge/category/1/page:1

というURLを吐いてほしいのに、

/hoge/mobile_category/1/page:1

というURLを吐いてしまい、prefixで指定された接頭辞がAction名に指定されているため、private扱いになってしまいエラーと判断されてしまいます

どうもこれが近しい現象のようなのですが、この設定に変更しても当方が望む「/m/hoge/category/1/page:1」を吐いてくれませんでした。
http://blog.absun.info/?eid=994036

同様の問題を解決された方、または何かしらアドバイスございましたら、よろしくお願いします。
shun
投稿日時: 2009-8-27 9:15
Cake 職人
登録日: 2006-7-14
居住地: 東京、日本
投稿: 1007
Re: Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない
下記の記事、似ているようですがいかがでしょうか。

Abstract Sunriseな日々
[CakePHP1.2]携帯ルーティング設定している時のpaginator
http://blog.absun.info/?eid=994036


<?php
Router
::connect('/', array('controller' => 'blogs''action' => 'index''home'));
Router::connect('/m/', array('controller' => 'blogs''action' => 'index''prefix' => 'mobile''mobile'=>true));
if (
preg_match("/\/m\//"$_SERVER['REQUEST_URI'])) Router::connect('/m/:controller/:action/*', array('controller'=>'blogs''action' => 'index''prefix' => 'mobile''mobile'=>true));
?>


「自分の場合は、携帯用ビューでpaginatorを使用した際のリンクがうまく変換されなかった("/m/blogs/"とならず、"/blogs/mobile_index/"となってしまっていた)ので症状は上記参考サイトと違うのですが、同じように処理を入れることで無事に解決できました。」
_gtd
投稿日時: 2009-8-27 11:31
Baker スタート
登録日: 2009-2-1
居住地:
投稿: 8
Re: Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない
shunさん、返信ありがとうございます。

教えて頂いたroute.phpに従い、自分のroute.phpをcontroller名以外は全て同じにしてみたのですが、この症状を解決できませんでした・・・。

マジメにpagintor.php⇒route.phpを追いかけていたのですが、かなり階層が深く段々めんどくさくなって、非常に強引なやり方ですが「"/m/blogs/"とならず、"/blogs/mobile_index/"」となっているのなら、文字列として置換して戻すという力技でなんとか動かしています。

スマートには程遠いですが、とりあえず望むことは出来ましたので、一旦置いておきたいと思います
cakephper
投稿日時: 2009-8-27 18:21
一人前
登録日: 2008-9-5
居住地: 神奈川
投稿: 74
Re: Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない
ちょっと興味があったので、手元で実験したら、自分の環境も同様の問題が発生しました。

ソースを追ってみたり、海外のサイトを調べたりしましたが、基本はAdminルーティングしかまともに動かないっぽい。。。
Adminルーティングをサイト全体で使わなくて良い前提があれば、core.phpに下記のようにすればいけます

<?php
Configure
::write('Routing.admin''mobile');
?>



それ以外の方法としては、
とりあえず、paginationで検索条件などのパラメータの引継ぎをしなくてもよければw、下記の方法で出来ました

routes.php

<?php
Router
::connect('/m/:controller/:action/*', array('prefix' => 'mobile''mobile'=>true ));
?>



views/hoge/mobile_index.ctpの最初の方に下記の1文を追加

<?php
$paginator
->options(array('url' => array('mobile' => true)));
?>




下記のサイトを参考に、
http://forums.wf.klevo.sk/comments.php?DiscussionID=122
パラメータも引き継ぐ方法をやってみましたが、これをやると駄目でした。
views/hoge/mobile_index.ctp

<?php
$paginator
->options(array('url' => array_merge( array('mobile' => true), $this->passedArgs)));
?>

cakephper
投稿日時: 2009-8-27 18:48
一人前
登録日: 2008-9-5
居住地: 神奈川
投稿: 74
Re: Prefix利用時のPaginatorHelperが吐くURLが正しく表示されない
ちなみに、prefixを使ったpaginatorのテストケースがコアライブラリの中にあるので、参考になります。


cake/tests/cases/libs/view/helpers/paginator.test.php
上記テストケースファイルの

function testUrlGenerationWithPrefixes()
という箇所のテストケースです。


ただし、パラメータの引継ぎのケースがないので、テストケース漏れのような気がしています。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .