不特定多数のパターンのURIを1つのコントローラーにすることって可能でしょうか

65 views
Skip to first unread message

ranbo...@gmail.com

unread,
Apr 27, 2017, 8:51:45 PM4/27/17
to fuelphp.jp
test/acterms以下に来る全てのURLパターンを
1つのコントローラーにすると言ったことは可能でしょうか?
test/acterms
test/acterms/
test/acterms/cd/
test/acterms/rest
や?id=xxx12313のようにgetパラムで不定形の文字列が来るパターンもあるので、以下全て許容して対象のコントローラー1つにアクセスするようにすることがしたいのです、下記のような記述で大丈夫かと思ったのですが、acterms以下の/の有無が上手く判定できないのと:anyは気安く使って大丈夫でしょうか。

'test/acterms(/:any)' =>  array(array('GET' , new Router::get('programming/test')))

kit.t

unread,
Apr 28, 2017, 12:27:37 AM4/28/17
to fuelphp.jp
kit.tです。

ルーティングは正規表現として処理されます。
「:any」は「.+」と等価なものですので、使用に問題はないかと思います。
/の有無については量指定子の?などが使用できます。
運用は少し慎重にする必要がありますが、以下のようにすると/以下ごと渡すこともできます。

'test/acterms/(:any)?' =>  array(array('GET' , new Router::get('programming/test/$1')))

引数についてはtest/acterms/restなどの場合、Controller_Programmingにaction_test($param)を作成すると$paramに'rest'が渡ります。
ただし、Controller_Programming_Restがあればそちらが優先されます。
getパラムはInput::getで取得して条件分岐とするのが良いのではないかと思います。


ルーティングの責務がコントローラーのactionメソッドに行ってしまう点については、
コントローラー側にrouterメソッドを作成して通常のルーティングを無効にする方法が用意されています。

2017年4月28日金曜日 9時51分45秒 UTC+9 ranbo...@gmail.com:

ranbo...@gmail.com

unread,
May 10, 2017, 12:47:55 AM5/10/17
to fuelphp.jp
ご返答ありがとうございます

試してみたのですが、この記載'test/acterms/(:any)?' トレイリングスラッシュを含まない場合
test/actermsには適応されませんでした。
この場合だけrouterにスラッシュのありなし2つの記載をする必要がありますでしょうか?

2017年4月28日金曜日 13時27分37秒 UTC+9 kit.t:
Reply all
Reply to author
Forward
0 new messages