Study
Play Framework

Form Handling & Validasi (Play Forms)

Penjelasan

Play Forms menyediakan cara deklaratif untuk memetakan data form HTML ke case class Scala sekaligus memvalidasinya. `Form(mapping(...)(ApplyFunction)(UnapplyFunction))` mendefinisikan struktur form beserta aturan validasi tiap field (misalnya `nonEmptyText`, `number(min = 0)`, `email`). Binding dilakukan lewat `form.bindFromRequest()` di dalam Action, yang otomatis mengambil data dari body request POST. Hasil binding dicek dengan `.fold(formDenganError => ..., dataValid => ...)` — cabang pertama dijalankan kalau ada error validasi (biasanya me-render ulang form dengan pesan error), cabang kedua dijalankan kalau data valid dan siap diproses lebih lanjut (misalnya disimpan ke database).

Contoh Konsep

import play.api.data._
import play.api.data.Forms._
import play.api.mvc._

case class DataProduk(nama: String, harga: Int)

val formProduk: Form[DataProduk] = Form(
  mapping(
    "nama" -> nonEmptyText,
    "harga" -> number(min = 0)
  )(DataProduk.apply)(DataProduk.unapply)
)

def simpan(): Action[AnyContent] = Action { implicit request =>
  formProduk.bindFromRequest().fold(
    formError => BadRequest("Form tidak valid"),
    data => Ok(s"Produk ${data.nama} seharga ${data.harga} disimpan")
  )
}

Praktikum

Buat Form untuk case class DataPendaftar(nama: String, umur: Int, email: String) dengan validasi umur minimal 17 dan email harus format email valid.

Editor Latihan

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

Tips

Selalu tampilkan ulang form dengan pesan error yang jelas di cabang gagal fold, jangan cuma BadRequest polos — pengguna butuh tahu field mana yang salah dan kenapa.