Ketika berbicara tentang error handling di Laravel, sebagian besar developer langsung teringat dengan block try-catch yang familiar. Namun, tahukah kamu bahwa Laravel menyediakan helper method yang lebih elegan bernama rescue()? Di Laravel 12, method ini semakin powerful dan patut Anda pertimbangkan sebagai alternatif penanganan error yang lebih clean dan readable.
Apa Itu rescue() Helper Method?
rescue() adalah helper function bawaan Laravel yang memungkinkan kamu menjalankan callback tertentu dan menangkap exception yang mungkin terjadi, semuanya dalam satu baris kode yang simpel. Method ini return nilai dari callback jika berhasil, atau nilai default/fallback jika terjadi error.
rescue(callback $callback, mixed $rescue = null, bool $report = true)
Perbandingan Antara Try-Catch dengan rescue()
Mari kita lihat perbandingan dibawah ini antara menggunakan block try-catch dengan helper method rescue().
Try-Catch
public function getUserData($userId)
{
try {
$user = User::findOrFail($userId);
$profile = $user->profile()->firstOrFail();
return $profile->getData();
} catch (Exception $e) {
Log::error('Error getting user data: ' . $e->getMessage());
return null;
}
}
rescue()
public function getUserData($userId)
{
return rescue(function () use ($userId) {
$user = User::findOrFail($userId);
$profile = $user->profile()->firstOrFail();
return $profile->getData();
}, null);
}
Lebih clean, bukan? Kode menjadi lebih singkat tanpa kehilangan fungsionalitas error handling.
Keuntungan Menggunakan rescue()
- Readable Code
Dengan rescue(), kita menghilangkan boilerplate code dari try-catch block menjadi lebih flat dan mudah dibaca, terutama untuk operasi sederhana yang membutuhkan error handling.
- Return Value Yang Flexible
Kita bisa menentukan nilai fallback secara langsung sebagai parameter kedua:
// Return empty array
$data = rescue(fn() => json_decode($jsonString, true), []);
// Return default as string
$name = rescue(fn() => $user->profile->name, 'Guest User');
// Return the result of another closure
$value = rescue(
fn() => $api->fetchData(),
fn() => Cache::get('fallback_data')
);
- Automatic Error Reporting
By default, rescue() akan melaporkan exception ke log Laravel. kita juga bisa menonaktifkannya dengan menambahkan boolean parameter ketiga:
$result = rescue(fn() => $riskyOperation(), null, false);
Real Use Case rescue() Method
- Fetching Data dari Eksternal API
Ketika memanggil API eksternal yang unreliable, rescue() sangat berguna untuk memberikan fallback value tanpa crash:
public function fetchWeatherData($city)
{
return rescue(function () use ($city) {
$response = Http::timeout(5)->get("api.weather.com/data/{$city}");
return $response->json();
}, [
'temperature' => 'N/A',
'condition' => 'Data unavailable'
]);
}
- File Operations Dengan Default Value
Ketika membaca config file yang mungkin tidak ada atau corrupt, rescue() sangat berguna untuk memberikan fallback ke konfigurasi default tanpa menghentikan aplikasi.
public function readConfigFile($filename)
{
return rescue(
fn() => json_decode(File::get(storage_path("configs/{$filename}")), true),
config('app.default_config')
);
}
- Database Queries Dengan Fallback
Saat query database utama gagal (misalnya koneksi timeout atau tabel tidak ditemukan), rescue() akan melakukan fallback ke data cache atau query alternatif untuk menjaga user experience tetap smooth.
public function getPopularPosts()
{
return rescue(
fn() => Post::popular()->published()->limit(10)->get(),
fn() => Cache::remember('fallback_posts', 3600, function () {
return Post::latest()->limit(10)->get();
})
);
}
Kapan Kita Menggunakan rescue()?
Helper rescue() paling cocok digunakan ketika kamu butuh simple one-liner untuk handle potential exception dengan default value atau fallback logic. Ini sangat berguna untuk fetching remote data, parsing operations, atau accessing potentially missing array keys.
Namun, kalau kamu butuh catch multiple exception types dengan handling berbeda atau perlu akses detail exception object, try-catch block mungkin masih lebih appropriate.
Penutup
rescue() helper method adalah tools yang powerful namun sering overlooked di Laravel. Untuk kasus-kasus error handling yang sederhana dengan fallback value yang jelas, rescue() menawarkan solusi yang lebih elegan dan readable dibanding try-catch tradisional.
Thankyou.
