チュートリアル ルーティング
前 チュートリアル RestコントローラとHybridコントローラ
おはようございます。ゆう☆きんです。
今回はルーティングについて説明したいと思います。
FuelPHPでは fuel/app/config/routes.php を編集することでルーティング設定が行えます。
では、どのように編集すればいいのか見て行きましょう。
※ルーティングについての説明はURLを多用し、非常にめんどいので http://localhost/fuelphp ではなく http://example/ とします。
基本的なルーティング
1 2 3 4 5 |
<?php return array( 'login' => 'user/login', ) |
この場合、 http://example/user/login ではなく http://example/login でアクセスできるようになります。
予約済みのルート
fuel/app/config/routes.php を見て下さい。
_root_ と _404_ が設定されていますが、これはFuelPHPであらかじめ定義されている特殊なルートです。
_root_ は http://example/ にアクセスしたときにルートです。
つまりサイトのトップページです。
_404_ は コントローラやメソッドがなかったときのルートです。つまり 404 Not Found 用のルートです。
正規表現によるルーティング
ルーティング設定では正規表現も使えます。正規表現の説明は省きます。
また正規表現以外にも、以下のようなものが使えます。
文字列 | 意味 | 実際の正規表現 |
---|---|---|
:any | URIの任意の部分にマッチ | .+ |
:segment | URIの1つのセグメントにマッチ | [^/]* |
:num | 数字にマッチ | [[:digit:]]+ |
:alpha | 文字にマッチ | [[:alpha:]]+ |
:alnum | 文字と数字にマッチ | [[:alnum:]]+ |
これだけ書くとちょっと意味わかんないんでサンプル。
1 2 3 4 5 6 7 8 9 10 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'yugi/(:any)' => 'sample/shodai/$1', // (1) '(:segment)/judai' => 'sample/gx/$1', // (2) '{:num}/yusei' => 'sample/5ds/$1', // (3) ); |
この場合、 http://example/yugi/hitode で(1)にルーティングされます。
ルーティング処理は上から順に実行されます。
なので、 http://example/yugi/judai でも(2)ではなく(1)にルーティングされるので注意です。
http://example/haou/judai の場合は(2)に、 http;//example/123/yusei の場合は(3)にそれぞれルーティングされます。
ここからは高度なルーティングについて説明します。
名前付きパラメータ
名前付きパラメータとは、URIのセグメントに名前を付けるものです。
パラメータは : (コロン)を付けることで表せます。また、パラメータ名に数字を使うことができません。
というわけでサンプル。
1 2 3 4 5 6 7 8 9 10 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'cal/:year/:month/:day' => 'sample/cal', // (1) 'cal/:year/:month' => 'sample/cal', // (2) 'cal/:year' => 'sample/cal', // (3) ); |
例えば、 http://example/cal/1988/12/26 で(1)にルーティングされます。
この際、コントローラでは $this->param(‘year’); $this->param(‘month’); $this->param(‘day’); を使って各パラメータの数値を取得できます。
http://example/cal/2013 の場合は(4)になり、 $this->param(‘year’); のみ使用可能になるという感じです。
ここで注意ですが、セグメントの多い順から設定しないと http://example/2013/01/18 で cal/year にマッチしてしまう場合があるので、注意してください。
あ、ちなみに最初の日付は私の誕生日です。祝ってくれてもいいんですよ?
HTTPメソッドの使用
サンプル。
1 2 3 4 5 6 7 8 9 10 11 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'sample/(:any)' => array( array('GET', new Route('data/get/$1')), array('POST', new Route('data/post/$1')) ), ); |
http://example/sample/abc にGETでアクセスすれば http://example/data/get/abc にルーティングされ、
http://example/sample/abc にPOSTでアクセスすれば http://example/data/post/abc にルーティングされます。
つまりそういうことです。
名前付きルート
サンプル。
1 2 3 4 5 6 7 8 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'rasta/yukin' => array('yukin/index', 'name' => 'yukin'), // (1) ); |
この場合、 http://example/yukin/index にアクセスすると http://example/yukin/index にルートされます。
そして、そのルートに対して yukin という名前を付けていることになります。
これで何が出来るかというと、 Router::get(‘ルート名’); でURLを生成できるようになるので、下記のようなことが可能です。
1 2 3 4 5 6 7 8 9 10 11 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>リンクの生成</title> </head> <body> <?php echo Html::anchor(Router::get('yukin'), 'ゆうきんのページ'); ?> </body> </html> |
Html::anchor とはリンクを生成するメソッドです。
第1引数でURLを指定し、第2引数でリンク名を指定します。
この場合、 Router::get(‘yukin’) で生成したURLを渡してるわけです。
このようにすることが可能ですので、例えば rasta/yukin から rasta/member/yukin にしたいなぁとなったとき、
ルーティング設定だけ更新すればいいので、ビューを弄る必要がありません。
同じURLを複数のビューでリンクするとき、複数のビューを直す手間が省けます。
名前付きルートを使用するときの注意ですが、正規表現や名前付きパラメータが使用出来ません。※現在 FuelPHP 1.2
以上でルーティング設定の説明を終わります。
コントローラ名/メソッド名で生成されるURLだけでは限界があるので、是非活用して下さい。
では、おやすみなさい。