Study
Play Framework

Controller & Action

Penjelasan

Controller di Play adalah class yang meng-extend `BaseController`, berisi method-method yang dipanggil dari `conf/routes`. Setiap method controller yang menangani request harus mengembalikan sebuah `Action`, yaitu fungsi yang menerima `Request` dan menghasilkan `Result` (atau `Future[Result]` untuk versi asinkron). `Action` adalah abstraksi inti Play untuk memproses HTTP request-response. Cara paling sederhana membuat Action adalah `Action { request => Ok("teks") }` atau versi tanpa akses request `Action { Ok("teks") }`. `Ok`, `NotFound`, `BadRequest`, dsb adalah helper untuk membuat `Result` dengan status HTTP yang sesuai beserta body responsnya.

Contoh Konsep

package controllers

import javax.inject._
import play.api.mvc._

@Singleton
class ProdukController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {

  def daftar(): Action[AnyContent] = Action {
    Ok("Daftar semua produk")
  }

  def detail(id: Long): Action[AnyContent] = Action {
    if (id > 0) Ok(s"Detail produk id=$id")
    else NotFound("Produk tidak ditemukan")
  }
}

Praktikum

Buat method hapus(id: Long) di ProdukController yang mengembalikan Ok dengan pesan konfirmasi penghapusan produk berdasarkan id.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Gunakan Action.async ketika logic di dalamnya melibatkan operasi asinkron (Future) seperti query database — jangan memblokir di dalam Action biasa karena akan menahan thread pool Play.