はじめてのKohana (4) : ルーティング
この記事は賞味期限切れです。(更新から1年が経過しています)
「はじめてのKohana」の第四回目です。 今回は、KohanaのURLルーティングについて紹介します。
ルーティングを設定してURLをデザインする
ルーティングの設定は、追加・編集する事ができます。
多くのケースはデフォルトのルーティングでまかなえるかもしれませんが、 ルーティングを駆使する事でよりユーザーフレンドリーなURLをつくり上げる事ができます。
幾つかのケースを例としてあげてみます。
パラメータを増やす
例えば、下記のようにパラメータにIDを渡して記事を表示するコントローラを作ったとします。
http://www.example.com/article/show/12345
これに対して、IDだけではなくカテゴリも渡したいとします。 カテゴリは、IDの前に挟む形とします。例えば、こんなふうに。
http://www.example.com/article/show/news/12345
これを実現するためのルーティング設定は、次のようになるでしょう。
Route::set(
'article', // 1. ルーティングの名前
'(<controller>(/<action>(/<category>(/<id>))))', // 2. ルーティングルール
array( 'controller' => 'article' ) // 3. ルールを適用する条件
);
名前は重複しなければ好きな名前で良いです。 第三引数の「ルールを適用する条件」は、URLがルーティングルールによって解析された結果、 “controller” の値が “article” である場合に適用する、という事を示しています。
“article” の部分は正規表現として処理されるので、 もしも “information” コントローラでもこのルーティングを使用したければ、下記のようにすればよいでしょう。
array( ‘controller’ => ‘(article|information)’ ),
パラメータを省略する
例えば、ユーザのプロフィールを表示するためのコントローラを作ったとします。
class Controller_Users extends Controller {
…
public function action_profile(){
// プロフィールを表示する処理
}
...
}
現状のアクセス方法は以下のようになっていますが、
http://www.example.com/users/profile/john
次のようにシンプルにしたい。
http://www.example.com/john
この方がよりわかりやすく、ドメインとユーザ名だけ覚えておけば簡単にアクセス出来ますね。 これを実現する為に、次のようなルーティング設定をしてみます。
/**
* デフォルトのルーティング
*/
Route::set(
"default",
"(<controller>(/<action>(/<id>)))",
array(
"controller" => "(foo|bar|users)" // 定義済みコントローラ名を羅列
)
)
->defaults(
array(
"controller" => "welcome",
"action" => "index"
)
);
/**
* Controller_Users用のショートカット
*/
Route::set(
"users_shortcut",
"<user_id>(/<action>)",
array(
"user_id" => "[a-zA-Z0-9_]+" // user_id用の正規表現
)
)
->defaults(
array(
"controller" => "users", // 初期設定のコントローラ
"action" => "profile" // 初期設定のアクション
)
);
前半部分は、元々あったデフォルトのルールを弄り、 既に定義済みのコントローラ名にマッチする物だけに適用されるようにしました。
後半は肝となるController_Usersのショートカット用のルールです。 ユーザーIDの書式にマッチする物であれば、Controller_Usersのアクションを実行するようになります。
(/
例えば、
http://www.example.com/john/favorites
等とすれば、Controller_Usrs の action_favorites が呼ばれ、 johnさんがお気に入りに登録した情報が表示される、といった事が出来ます。
尚、Kohanaでは controller と action はルーティングにおいて必須になっており、 上で挙げた例のように省略したい場合は、必ず defaults メソッドで初期値を設定してやる必要があります。
ユーザ名の予約語
ここで気をつけなければならないのは、このようなURLにする場合、 コントローラ名として定義されている物はユーザ名として提供できなくなるという事です。
それらを予約語としてリスト化する等して、登録時にはじく処理を加える必要がありますね。
様々な形式のフィードを出力する
ルーティングは、必ずしも /(スラッシュ)のみで区切られていなければならないわけではありません。 その一例として、RSSやAtom、JSON等、様々な形式で情報を出力したい場合のルーティングの例を挙げます。
Route::set(
"feed",
"<controller>.<filetype>",
array(
"controller" => "feed",
"filetype" => "(xml|rss|atom|json)"
)
)
->defaults(
array(
"action" => "index"
)
);
コントローラはこのような感じで。
class Controller_Feed extends Controller {
...
public function action_index(){
$filetype = $this->request->param("filetype");
// フィードを出力する処理
}
}
次のようなパスでアクセスできます。
/feed.rss
cf) Routing | Kohana User Guide
まとめ
見通しの良いURLは、アプリケーションの使い勝手を向上させると思います。 URLのデザインにも気を使ってあげたいですね。
次回は、ビューについて。
» もくじ
コメント