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