Routing dengan Parameter
Penjelasan
Selain path statis, route Yesod bisa menangkap bagian dinamis dari URL dengan menuliskan tipe datanya langsung di config/routes, misalnya #ProdukId untuk menangkap id sebagai kunci Persistent, #Int untuk angka, atau #Text untuk string bebas. Yesod otomatis mem-parsing segmen URL sesuai tipe tersebut, dan jika parsing gagal (misalnya id bukan angka valid), Yesod langsung mengembalikan 404 tanpa kode tambahan. Untuk parameter multi-segmen (menangkap sisa path sebagai list), dipakai tanda bintang seperti *Texts. Karena parameter route menjadi argumen fungsi handler dengan tipe yang sudah pasti, tidak ada kebutuhan melakukan parsing atau validasi ulang tipe di dalam badan fungsi seperti pada framework yang route parameternya selalu string mentah.
Contoh Konsep
-- config/routes
/produk/#ProdukId ProdukDetailR GET
/produk/kategori/#Text ProdukKategoriR GET
/arsip/*Texts ArsipR GET
-- src/Handler/Produk.hs
getProdukDetailR :: ProdukId -> Handler Html
getProdukDetailR pid = do
produk <- runDB $ get404 pid
defaultLayout [whamlet|<h1>#{produkNama produk}|]
getProdukKategoriR :: Text -> Handler Html
getProdukKategoriR kategori =
defaultLayout [whamlet|<h1>Kategori: #{kategori}|]
Praktikum
Tambahkan route /artikel/tag/#Text bernama ArtikelTagR di config/routes, lalu buat signature handler getArtikelTagR yang sesuai.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan tipe khusus (misal ProdukId) alih-alih Int polos untuk parameter id, supaya kompiler menolak kalau kamu tidak sengaja menukar urutan parameter id dari entity berbeda.