Help us understand the problem. What is going on with this article?

[PlayFramework] 02. Actions, Controllers and Results

More than 3 years have passed since last update.

Scalaの一番有名なフレームワークはPlay Frameworkである。

Play Frameworkに対して簡単に勉強しようと。

特に話がない内容はPlayFramework公式ホームページの内容を基に作成。

Actions, Controllers and Results

routes

// routes
GET / controllers.HomeController.index

http://localhost:9000に接続するとroutesによって、HomeControllerのindex関数が実行される。

Action(Controllers)

ほとんどのRequestはActionによってハンドルされる。

play.api.mvc.Actionは基本的に(play.api.mvc.Request => play.api.mvc.Result)関数である。

Requestをハンドルした後、処理の結果をClientに返す。

// HomeController.scala
def index = Action {
    implicit request => Ok(views.html.index())
}

index関数はRequestに対して、200OKとindex.scala.htmlを返す。

Templates(Views)

// index.scala.html
@()
@main("title") {
    <h1>Index Page</h1>
    This is a index page.
}

// main.scala.html
@(title: String)(content: Html)
<!DOCTYPE html>
<html>
    <head><title>@title</title></head>
    <body>@content</body>
</html>

index.scala.htmlは、mail.scala.htmlのテンプレートに書く内容が書いてある。

Simple Result

HTTPのResultはSTATUS CODEと一緒に出る。

HTTPのHeaderとBodyを作成して、Clientに返してみようと。

Resultはplay.api.mvc.Resultに定義されている。

import play.api.http.HttpEntity
import akka.util.ByteString

def index = Action {
    implicit request => Result(
        header = ResponseHeader(200, Map.empty),
        body = HttpEntity.Strict(ByteString("Hello world!"), Some("text/plain"))
    )
}

様々なResultがあるので、確認を。

val ok = Ok("Hello world!")
val notFound = NotFound
val pageNotFound = NotFound(<h1>Page not found</h1>)
val badRequest = BadRequest(views.html.form(formWithErrors))
val oops = InternalServerError("Oops")
val anyStatus = Status(488)("Strange response type")

Redirect

def index = Action {
    implicit request => Redirect("/", MOVED_PERMANENTLY)
}
kimzzang
PHPer・韓国人 ブログのポストの中で、皆さんに共有したいものをQiitaに公開します。
https://medium.com/@kim.jangwook
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away