いやぁCodeIgniterは私のようなプログラム苦手の人でもいろいろ出来るので便利ですね。
今回はURLの調整(ルーティング)について、個人的なメモを書いておきます。
確認環境
- CodeIgniter2.0.3J
状況説明
「http://localhost/archive/index/20121229」というURLがあったとします。
- archive…クラス名
- index…function名
- 20121229…ユニークな記事ID
URLの中で、indexという文字列部分は冗長なので削除し「http://localhost/archive/20121229」というURLにしたい場合です。
routes.phpに設定を追加する
application/config/routes.phpを開き、以下を追加します。
$route['archive/:num'] = archive/index;
:numはセグメントに数字が含む場合を表します。
左のarchive/:numにアクセスしてきた場合に、右のarchive/indexだとみなして処理しなさい、と読みます。
:num(数字)のほかに、:any(文字列)だったり、さらに正規表現も使えたりします。詳しくは公式ドキュメントを見ると分かりやすく書かれています。
注意点
例えば以下のようなセグメントを取得する記述をしていた場合、ルーティングの変更によってセグメントの位置が変わるため、数字部分を変える必要がある場合が発生します。
変更したルーティングに関連したセグメントはチェックしておくといいでしょう。
$this->uri->segment(2,0);
補足:CodeIgniterにおけるセグメントとは
標準では、URLがスラッシュで区切られた部分の1つ1つを指します。
http://localhost/archive/index/20121229の場合、以下のようにセグメントを数えます。
もちろんセグメントの数が多くなったり、少なくなったりしたら、それに伴って番号も増えたり減ったりします。
- archive…第1セグメント
- index…第2セグメント
- 20121229…第3セグメント