Handler Function & Respond
Penjelasan
Setiap route di Yesod dilayani oleh fungsi handler yang namanya mengikuti pola method+NamaRouteR, misalnya getProdukR untuk GET ke ProdukR, dan berjalan di dalam Handler monad yang menyediakan akses ke request, session, dan koneksi database lewat runDB. Handler bisa mengembalikan berbagai tipe response: Html lewat defaultLayout untuk halaman biasa, Value (JSON) lewat returnJson, atau redirect lewat fungsi redirect. Karena Haskell adalah bahasa dengan tipe statis, tanda tangan fungsi handler (misalnya getProdukR :: Handler Html) memberi kejelasan tentang jenis response apa yang dihasilkan, dan kompiler akan menolak jika ada percabangan kode yang mengembalikan tipe berbeda tanpa disatukan lebih dulu.
Contoh Konsep
getProdukR :: Handler Html
getProdukR = do
produkList <- runDB $ selectList [] [Asc ProdukNama]
defaultLayout $ do
setTitle "Daftar Produk"
[whamlet|
<h1>Daftar Produk
<ul>
$forall Entity _ p <- produkList
<li>#{produkNama p}
|]
postProdukR :: Handler Html
postProdukR = do
_ <- runDB $ insert $ Produk "Sepatu" 250000
redirect ProdukR
Praktikum
Lengkapi fungsi getArtikelR agar mengambil semua Artikel dari database dan menampilkannya sebagai daftar di halaman HTML.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan get404 alih-alih get biasa saat mengambil data berdasarkan id dari URL, supaya Yesod otomatis mengembalikan halaman 404 jika data tidak ditemukan tanpa perlu menulis pengecekan manual.