Documentation

You are viewing the documentation for the 2.3.x release series. The latest stable release series is 2.4.x.

§Action’lar, Controller’lar ve Result’lar

§Action nedir?

Bir Play uygulaması tarafından alınan isteklerin çoğu bir Action tarafından karşılanır.

play.api.mvc.Action basitçe bir isteği karşılayarak istemciye gönderilmek üzere bir yanıt oluşturan (play.api.mvc.Request => play.api.mvc.Result) şeklinde bir fonksiyondur.

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

Action, web istemciye gönderilecek HTTP yanıtını ifade eden play.api.mvc.Result türünden bir değer döndürür. Bu örnekte Ok yanıt gövdesi text/plain olan bir 200 OK yanıtı oluşturur.

§Action oluşturma

play.api.mvc.Action eş nesnesi bir Action değeri oluşturmak için çeşitli yardımcı metotlar sunar.

Bunlardan en basit olanı yalnızca Result döndüren bir ifade bloğunu argüman olarak alır:

Action {
  Ok("Hello world")
}

Bir Action oluşturmanın en kolay yolu bu olsa da gelen isteğe bir referans alamayız. Çoğu zaman bu Action’ı çağıran HTTP isteğine erişmeye ihtiyaç olur.

Bu sebeple Request => Result fonksiyonunu argüman olarak alan başka bir Action yapıcı bulunmaktadır.

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

İhtiyaç duyan diğer API’lerin de örtük biçimde erişebilmesi için request parametresini implicit olarak işaretlemek kullanışlı olur.

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

Bir Action değeri oluşturmanın son yolu ek bir BodyParser(Gövde ayrıştırıcı) argümanı belirtmektir:

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

Gövde ayrıştırıcılar bu kılavuzda daha sonra ayrıntılı şekilde ele alınacak. Şimdilik bilmeniz gereken Action değeri oluşturmanın diğer yollarının varsayılan olarak Herhangi içerik gövde ayrıştırıcı kullanıyor olmalarıdır.

§Controller’lar action üreticidir

Controller, Action değerler üreten bir singleton nesneden başka bir şey değildir.

Bir action üretici tanımlamanın en basit yolu Action değeri döndüren parametresiz bir metottur.

package controllers

import play.api.mvc._

object Application extends Controller {

  def index = Action {
    Ok("It works!")
  }

}

Elbette üretici metot parametreler alabilir ve bu parametreler Action closure tarafından hapsedilebilir.

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

§Basit yanıtlar

Şimdilik yalnızca basit yanıtlarla ilgileniyoruz: web istemciye gönderilecek durum kodu, HTTP başlıkları ve gövdeden ibaret olan HTTP yanıtı.

Bu yanıtlar play.api.mvc.Result tarafından tanımlanır:

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

Elbette yukarıdaki örnekteki Ok yanıtı gibi sık kullanılan yanıtları oluşturmak için çeşitli yardımcılar bulunmaktadır.

def index = Action {
  Ok("Hello world!")
}

Bu, önceki ile birebir aynı sonucu üretir.

Aşağıda çeşitli yanıtlar üretmek için örnekler verilmiştir.

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üm bu yardımcılar play.api.mvc.Results trait ve eş nesnesinde bulunmaktadırlar.

§Yönlendirmeler de birer basit yanıttır

Tarayıcıyı yeni bir URL’e yönlendirmek de başka bir tür basit yanıttır. Fakat bu yanıt türleri yanıt gövdesi içermezler.

Yönlendirme yanıtları yaratmak için çok sayıda yardımcı bulunmaktadır.

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

Varsayılan 303 SEE_OTHER yanıt türüdür; fakat ihtiyaç duyarsanız farklı bir durum kodu belirtebilirsiniz:

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

§“TODO” taslak sayfası

TODO olarak tanımlanan boş bir Action kullanabilirsiniz. Bu durumda sonuç standart bir ‘Henüz gerçeklenmedi’ sayfası olur.

def index(name:String) = TODO

Sonraki: HTTP Routing


Dokümantasyonun bu çevirisi Play ekibi tarafından yapılmamaktadır. Eğer bir hata bulduysanız, bu sayfanın kaynak kodu burada bulunmaktadır. Dokümantasyon yönergelerini okuduktan sonra lütfen katkı yapmaktan çekinmeyin.