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.
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.