この記事は以下の記事の続きです。
ScalaでPlayFramework: コントローラ編
公式ドキュメントはこちら
Play 2.5.10 documentation
この記事の内容は、だいたい以下のページに書かれています。
ビューをいじってみる
PlayFrameworkではTwirlというテンプレートエンジンを使用します。
作ったビューはプロジェクトルート以下のapp/views
に入れます。
今回はhello_twirl
という名前のビューを作ってみます。
コメントを書く
@*
と*@
で囲んだ部分がコメントになります。
@* hello_twirl Template File *@
パラメータを受け取る
テンプレートの先頭に以下のように書くことでパラメータを受け取ることができます。
3つ目の例のように、デフォルト引数を指定することもできます。
@(num: Int, str: String, default: String = "twirl")
...
コントローラからパラメータを渡す
ビューを使うには以下のように書きます。引数がそのままビューにパラメータとして渡ります。
Eclipse上ではエラーが出ますが、問題なく動作します。エラーどうにか消せないのかな?
...
def hello_twirl = Action {
Ok(views.html.hello_twirl(1, "Hello", "Play!"))
}
...
ルーティングに忘れずに追加しましょう。
...
GET /hello_twirl controllers.HomeController.hello_twirl
...
変数を埋め込む
@変数名
で変数を埋め込めます。
@(num: Int, str: String, default: String = "twirl")
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>@str @default</h1>
num is @num!
</body>
</html>
/hello_twirl
にアクセスすると、コントローラで指定した値が表示されるはずです。
関数やら制御構文を使う
関数を定義することができます。制御構文は、if
とfor
を使うことができます。
@(num: Int, str: String, default: String = "twirl")
@upperCase(c: Char) = {
@c.toString.capitalize
}
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>@str @default</h1>
num is @num!
<ul>
@for(c <- str) {
@if( c == 'H' ) {
<li>HHH!</li>
} else {
<li>@upperCase(c)</li>
}
}
</ul>
</body>
</html>
値を定義する
スコープの中で有効な値を定義することができます。使いみちはよくわからない。
...
@defining(str + " " + default) { text =>
<div>@text</div>
}
...
インポートする
できるみたいです。
@(num: Int, str: String, default: String = "twirl")
@import utils._
...
全てのテンプレートでインポートしたいものがあれば、build.sbt
に書くといいみたいです。
TwirlKeys.templateImports += "org.abc.backend._"
エスケープする
あります。
...
@Html("<>")
...
おわりに
パラメータにどんなのがあるかわかるのがいいですね。
今使ってるPHPのCodeIgniterはビューだけ見てると突然謎の変数が出てきて、なんだこれってなるので。
クオリティが非常にアレな感じですが、執筆時点で絶賛風邪引き中なので許してくだされ。。。
次はモデルを扱います。