URLルーティング

URLルーティングとは、リクエストされた URL に対して呼び出すアクションを決定する仕組みのことです。ブラウザからリクエストを受け取ると、このルーティングルールに該当するURLかどうかチェックされ、該当すれば定義したアクションが呼び出されます。該当しなければ、デフォルトのルールによるアクションが呼び出されます。

繰り返しになりますが、デフォルトのルールは次のとおりでした。

 /コントローラ名/アクション名/引数1/引数2/...

では、ルーティングルールをカスタマイズしてみましょう。
ルーティングの定義は config/routes.cfg に記述します。1つのエントリは、1行でディレクティブ、パス、アクションを並べて書きます。 ディレクティブは match, get, post, put, delete の中から1つ選択 します。
なお、# ではじまる行はコメント行と見なされます。

例えば、次のように書きます。

 match  /index  Merge.index

この場合には、ブラウザから /index とリクエストされたら、POSTメソッドかGETメソッドか関係なしにMerge コントローラの index アクションに受け渡します。

次に、get ディレクティブを定義した場合です。

 get  /index  Merge.index

この場合では、GET メソッドで /index がリクエストされた時だけ、ルーティングを実施します。 POST メソッドでリクエストされた場合は拒否されます(アクションに受け渡しません)。

同様に、post ディレクティブを指定した場合は、POST メソッドのリクエストのみ有効です。GETメソッドのリクエストは拒否されます。

 post  /index  Merge.index

次は、アクションに引数を渡す方法についてです。ルーティングルールとして次のエントリを定義したとします。”:params”というキーワードがポイントです。

 get  /search/:params  Searcher.search

この場合には、GETメソッドで /search/foo がリクエストされたら、Searcher コントローラの引数を1つ持つ search アクションが呼び出されます。その引数には “foo” が渡されます。
同様に、/search/foo/bar がリクエストされたら、引数を2つ持つ search アクションが呼び出されます。第1引数、第2引数にはそれぞれ “foo”、”bar” が渡されます。

 /search/foo     ->  SearcherController の search("foo");
 /search/foo/bar ->  SearcherController の search("foo", "bar");

ルーティングの表示

アプリをビルドした後に次のコマンドを実行することで、現在のルーティング情報を確認できます。

 $ treefrog --show-routes
 Available controllers:
   match   /blog/index  ->  blogcontroller.index()
   match   /blog/show/:param  ->  blogcontroller.show(id)
   match   /blog/create  ->  blogcontroller.create()
   match   /blog/save/:param  ->  blogcontroller.save(id)
   match   /blog/remove/:param  ->  blogcontroller.remove(id)