Study
Yesod

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.

Editor Latihan

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.