LoginSignup
12
18

More than 5 years have passed since last update.

ScalaでPlayFramework: ビュー編

Last updated at Posted at 2016-12-12

この記事は以下の記事の続きです。
ScalaでPlayFramework: コントローラ編

公式ドキュメントはこちら
Play 2.5.10 documentation
この記事の内容は、だいたい以下のページに書かれています。

ビューをいじってみる

PlayFrameworkではTwirlというテンプレートエンジンを使用します。
作ったビューはプロジェクトルート以下のapp/viewsに入れます。
今回はhello_twirlという名前のビューを作ってみます。

コメントを書く

@**@で囲んだ部分がコメントになります。

app/views/hello_twirl.scala.html
@* hello_twirl Template File *@

パラメータを受け取る

テンプレートの先頭に以下のように書くことでパラメータを受け取ることができます。
3つ目の例のように、デフォルト引数を指定することもできます。

app/views/hello_twirl.scala.html
@(num: Int, str: String, default: String = "twirl")
...

コントローラからパラメータを渡す

ビューを使うには以下のように書きます。引数がそのままビューにパラメータとして渡ります。
Eclipse上ではエラーが出ますが、問題なく動作します。エラーどうにか消せないのかな?

app/controller/HomeController.scala
...
  def hello_twirl = Action {
    Ok(views.html.hello_twirl(1, "Hello", "Play!"))
  }
...

ルーティングに忘れずに追加しましょう。

conf/routes
...
GET     /hello_twirl                controllers.HomeController.hello_twirl
...

変数を埋め込む

@変数名で変数を埋め込めます。

app/views/hello_twirl.scala.html
@(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にアクセスすると、コントローラで指定した値が表示されるはずです。

関数やら制御構文を使う

関数を定義することができます。制御構文は、ifforを使うことができます。

app/views/hello_twirl.scala.html
@(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>

値を定義する

スコープの中で有効な値を定義することができます。使いみちはよくわからない。

app/views/hello_twirl.scala.html
...
@defining(str + " " + default) { text =>
    <div>@text</div>
}
...

インポートする

できるみたいです。

app/views/hello_twirl.scala.html
@(num: Int, str: String, default: String = "twirl")

@import utils._
...

全てのテンプレートでインポートしたいものがあれば、build.sbtに書くといいみたいです。

build.sbt
TwirlKeys.templateImports += "org.abc.backend._"

エスケープする

あります。

app/views/hello_twirl.scala.html
...
@Html("<>")
...

おわりに

パラメータにどんなのがあるかわかるのがいいですね。
今使ってるPHPのCodeIgniterはビューだけ見てると突然謎の変数が出てきて、なんだこれってなるので。
クオリティが非常にアレな感じですが、執筆時点で絶賛風邪引き中なので許してくだされ。。。
次はモデルを扱います。

次: ScalaでPlayFramework: モデル編

12
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
18