
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi tiba-tiba aplikasi crash total cuma gara-gara satu input user yang nggak terduga; itu momen paling bikin gregetan pas lagi nge-deploy ke production. Saya sering banget ngelihat developer yang cuma ngandelin default error page Laravel padahal sebenarnya kita punya kontrol penuh buat bikin experience user tetap aman dan rapi meski ada masalah di balik layar.
Tips & Best Practices
Di banyak project, biasanya saya mulai dari bikin custom exception biar error-nya punya konteks jelas. Jangan cuma lempar Exception umum, buatlah kelas spesifik seperti PaymentFailedException supaya kamu bisa bedain mana error sistem dan mana error logika bisnis.
Kalau lagi nanganin API, saya lebih milih buat selalu pakai reportable() di file Exception agar log-nya teratur di CloudWatch atau Sentry tanpa ngotorin file log lokal terus-terusan.
Satu kebiasaan yang saya terapkan adalah selalu gunain render() method di exception class kita buat nge-return JSON response yang konsisten, jadi frontend developer nggak bakal komplain kalau struktur error berubah-ubah.
Contoh Kode
Biasanya saya nge-define exception custom gini biar error handling-nya rapi:
// App\Exceptions\OrderProcessException.php\n\npublic function report(): void\n{\n Log::error('Gagal proses order: ' . $this->getMessage());\n}\n\npublic function render($request)\n{\n return response()->json(['error' => 'Order gagal'], 422);\n}Variasi Implementasi
Ada dua pendekatan yang sering saya pakai. Pertama, via bootstrap/app.php untuk global handling yang gampang buat nangkep semua unhandled error di satu tempat. Kedua, pakai try-catch di controller kalau kita butuh flow khusus seperti rollback transaksi database. Kalau cuma butuh nge-log ringan, global handler jauh lebih bersih, tapi kalau butuh manipulasi response per fitur, try-catch lebih fleksibel.
Kesalahan Umum
Pertama, terlalu banyak try-catch yang kosong (silent fail) malah bikin error susah dilacak. Kedua, ngasih detail error sistem (seperti path database atau SQL query) langsung ke user, ini bahaya banget buat keamanan. Ketiga, lupa pake DB::transaction pas lagi ngoding fitur krusial yang berhubungan sama saldo atau data penting. Keempat, mengabaikan log-viewer; banyak yang ngerasa kalau nggak muncul di UI berarti nggak ada error. Kelima, ketergantungan sama abort(500) yang bikin user malah bingung harus ngapain lagi.
Ringkasan
Pada akhirnya, error handling itu bukan cuma soal ngilangin crash, tapi soal gimana cara kita komunikasi sama user pas situasi lagi nggak ideal. Jangan sampai user ngerasa ditinggal pas aplikasi kita lagi ada kendala; dengan handling yang tepat, aplikasi justru bakal kelihatan lebih profesional dan terpercaya di mata mereka.
Komentar
Posting Komentar