§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.