Actions, Controllers and Results in Scala

Actions trong Scala?

Hầu hết các request của Play application  được xử lý bởi một Action
Ví dụ play.api.mvc.Action về cơ bản là một play.api.mvc.Request => play.api.mvc.Result
Chức năng xử lý một yêu cầu và tạo ra một kết quả sẽ được gửi cho khách hàng

val echo = Action { request =>
  Ok("Got request [" + request + "]") 
}

Building an Action

Các đối tượng play.api.mvc.Action cung cấp một số phương pháp để xây dựng một giá trị hành động
Có nhiều cách để tạo ra 1 action, đơn giản nhất là trả về một giá trị như sau:

Action { 
        Ok("Hello world") 
}

Nhưng thường thì cần tới 1 HTTP request gọi Action này, có cách khác để tạo 1 action là sử dụng hàm: Request => Result (nhận request và trả về result)

 
Action { request =>
        Ok("Got request [" + request + "]") 
}

hoặc

Action { implicit request => 
   Ok("Got request [" + request + "]") 
}

hoặc

Action(parse.json) { implicit request => 
   Ok("Got request [" + request + "]")
}

Controllers are action generators

Một Controller là một đối tượng sinh ra Action
Ví dụ:

package controllers 
import play.api.mvc._ 
object Application extends Controller { 
  def index = Action { 
    Ok("It works!") 
  } 
} 

Action có thể thêm parameters như sau:

def hello(name: String) = Action {
  Ok("Hello " + name)
}

 Simple results

Những kết quả này được xác định bởi play.api.mvc.Result :

def index = Action {
  Result(
    header = ResponseHeader(200, Map(CONTENT_TYPE -> "text/plain")),
    body = Enumerator("Hello world!".getBytes())
  )
}

Dưới đây là một số ví dụ để tạo ra kết quả khác nhau:

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")

Tất cả giá trị trả về trên đều có trong  play.api.mvc.Results

Redirects are simple results too

Chuyển hướng dữ liệu sang browser URL như sau:

def index = Action { 
  Redirect("/user/home") 
}

Bạn có thể thiết lập thêm các tham số cho URL như sau:

def index = Action { 
  Redirect("/user/home", MOVED_PERMANENTLY) 
}

“TODO” dummy page

Bạn có thể sử dụng 1 Action cho một trạng thái mà bạn chưa hoàn thành.

def index(name:String) = TODO

Add a Comment

Scroll Up