Study
Yesod

Error Handling (Handler Exceptions)

Penjelasan

Yesod menyediakan beberapa fungsi bawaan untuk menghentikan eksekusi handler dan mengembalikan response error standar, seperti notFound untuk 404, permissionDenied untuk 403 dengan pesan custom, dan invalidArgs untuk kesalahan input. Fungsi-fungsi ini bekerja dengan melempar exception khusus yang ditangkap otomatis oleh Yesod dan diubah menjadi response HTTP yang sesuai. Untuk menyesuaikan tampilan halaman error secara global (misalnya halaman 404 custom bertema aplikasi), kita mengoverride fungsi errorHandler di dalam instance Yesod App. Ini memberi kontrol penuh atas tampilan error tanpa perlu menangani try/catch manual di setiap handler satu per satu.

Contoh Konsep

getProdukDetailR :: ProdukId -> Handler Html
getProdukDetailR pid = do
  mProduk <- runDB $ get pid
  case mProduk of
    Nothing -> notFound
    Just produk -> defaultLayout [whamlet|<h1>#{produkNama produk}|]

instance Yesod App where
  errorHandler NotFound = defaultLayout [whamlet|
    <h1>404 - Halaman Tidak Ditemukan
    <p>Maaf, halaman yang kamu cari tidak ada.
  |]
  errorHandler other = defaultErrorHandler other

Praktikum

Lengkapi handler getArtikelDetailR agar memanggil notFound jika artikel dengan id tersebut tidak ditemukan di database.

Editor Latihan

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

Tips

Pakai get404 sebagai singkatan dari get lalu notFound manual, ini mengurangi boilerplate case Nothing/Just yang sangat sering muncul di handler detail.