Mach3.laBlog

はじめてのKohana (4) : ルーティング

この記事は賞味期限切れです。(更新から1年が経過しています)

「はじめてのKohana」の第四回目です。 今回は、KohanaのURLルーティングについて紹介します。

はじめてのKohana

ルーティングを設定して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のアクションを実行するようになります。

(/) の部分は、ユーザーIDの後にメソッド名を渡す事で、 プロフィール閲覧以外のアクションが起こせるようにするための物です。

例えば、

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のデザインにも気を使ってあげたいですね。

次回は、ビューについて。


» もくじ

  1. Hello World !
  2. コントローラとビューの基本
  3. コントローラ
  4. ルーティング
  5. ビュー
  6. モデルとデータベース
  7. バリデーション

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*