O durumda firstOrFail, findOrFail gibi exception fırlatan bir yöntem kullanmışsanız 404 hata kodu ile ModelNotFoundException fırlatır. Exception fırlatmayan bir yöntem kullanıp üzerinden işlem yapmaya kalkarsanız, olmayan bir ürünü yazdırmak gibi, 500 hata kodu ile ErrorException fırlatır, Trying to get property of non-object vs alırsınız. Burada ModelNotFoundException bir hata değil, programcının kontrolündeki/kontrol etmesi gereken bir durumdur, işleyişin bir parçasıdır ama ErrorException yani 500 kodu ile gelen ise bir hatadır, yakalanabilir ama bence engellenebiliyorsa önce engellenmesi gerekir. Örneğin
public function edit($id)
{
try {
$product = Product::findOrFail($id);
return view('products.edit', compact('product'));
} catch (ModelNotFoundException $e) {
// Ürün bulunamadı. Bu bir hata değil, bir durum.
// Belki parametrelere elle müdahale edildi, belki başka biri mevcut kişiden önce ürünü sildi
return redirect()->route('products.index')->withErrors('Ürün bulunamadı');
} catch (Exception $e) {
// Burada bir hata söz konusu, belki ekstrem bir durum
// I/O hatası, memory hatası, MySQL hatası ya da izinler ile ilgili bir hata olabilir
// Framework'ün çalışmasını engelleyecek bir hata değilse yönlendirme çalışacaktır.
return redirect()->route('products.index')->withErrors($e->getMessage());
}
}
500 Internal Server Error çok genel bir hatadır. Kod imla hatası yaptığınızda da bu hatayı alırsınız, Laravel bu durumda FatalThrowableError fırlatır ama bilgi amaçlıdır sadece, fatal olanlar yakalanmaz. Ayrıca 500 hata kodu Exception kontrolü ile framework içinde olan bir şeydir. Normalde fatal error de alsanız http kodu 200 olarak dönüş yapar.