Plya2-Scala/URL routing

Plya2-Scala/URL routing

どんなURLでアクセスしてきたらどのコントローラーに渡すかという話し

failed to fetch data: unkown error

設定ファイル

どんな URL をどのコントローラーのメソッドにマッピングするかは config/routes というファイルで設定する。

基本

決まったURLを決まったコントローラへ

GET    /hello/world    controllers.Hello.world

このように設定すると GET メソッドで http://example.com/hello/world というURLでアクセスしてきた場合(ドメインはそれぞれ)、 Hello コントローラークラスの world メソッドを呼び出すことになる。

このように、

メソッド名    URL    コントローラー

のように並べて書くのが routes 設定の書き方の基本になる

URLの一部をパラメータとしてコントローラーへ渡す REST風版

REST的なURL(パラメータがスラッシュ区切りで並ぶ)にしようとした場合にどうするかという話

GET    /hello/:name    controllers.Hello.greet(name:String)

このように、URL の部分の一部をコロンから始まるものにし、その名前でコントローラーのメソッドを呼び出すように記述する

受ける側のコントローラーは

object Hello extends Controller {
  def greet(name:String) = Action {
    Ok("hello " + name)
  }
}

のようにして受け取る。

URLの一部をパラメータとしてコントローラーへ渡す REST風ラベル付き版

パラメータの一部にラベルが付いているようなパターン

つまり、

http://example.com/hello/namehogehoge

のように渡したいパラメータ(hogehoge)にnameというラベルが付属している場合

GET    /hello/name:name    controllers.Hello.greet(name:String)

このように何事もないようにラベルをくっつければよい

定義が被ってしまう場合はより上に書いたほうが採用される。つまり条件がキツイ順番に書けということだ

ではラベルが後ろに合った場合はどうなる?このように設定したい

GET    /hello/:namename    controllers.Hello.greet(name:String)

これはエラーになるので出来ないということだ。

URLの一部をパラメータとしてコントローラーへ渡す 正規表現版

パラメータの形式を正規表現で使える版。

コロンではなくドル記号で指定し、<>の中に正規表現を書く。

コレを使うと

GET    /hello/$name<[^/]+>name    controllers.Hello.greet(name:String)

コロンバージョンでできなかった後ろラベルとかにも対応できる。

注意すべき点、勘違いしない点としてパターン全体を正規表現で書く(うまく書いて設定自体の記述量を減らす)こととはできないということ。 正規表現はパラメータとして取りたい値がどのような形状の値をとるかということを表現する

QueryString から値を取る

外部からパラメータを取るオーソドックスなパターン。この場合は

GET    /hello/greet    controllers.Hello.greet(name:String)

このように URLには何も書かずに、引数を取るコントローラーを呼び出す。 この時の呼び出す引数名を想定される QueryString のキーと一致させる

http://example.com/hello/greet?name=hogehoge

このようにして呼び出せる。

静的ファイルの呼び出し

Playのデフォルトで routes ファイルに

GET     /assets/*file               controllers.Assets.at(path="/public", file)

このように記述されている。

これは

http://example.com/assets/a/b/c.jpg
http://example.com/assets/d/e/f.js

のような記述した呼び出しが

/public/a/b/c.jpg
/public/d/e/f.js

を呼び出すことを示している

つまり、controllers.Assets.at メソッドはファイルそのものをレスポンスするメソッドで、Play としては静的も動的も関係ないということになる。

play_framework/play2_scala/url_routing.txt · 最終更新: 2017-10-02 16:36 by ore