Laravel Route Model Binding Kullanımında Model Not Found 404 Hatasını Yakalayıp Başka Modele Yönlendirme

Laravelde Route Model Binding yöntemi ile Controllerda bir metod çalıştırdığımızda eğer model yoksa (kayıt bulunamazsa), laravel metodu çalıştırmadan 404 hatası döner. Bu durum metod içinde herhangi bir ekstra işlem yapmamızı kısıtlar. Örnek bir senaryo ele alacak olursak; gelen istek kategoride yoksa eğer aynı istek ürünlerde, yazılarda veya sayfalarda aranıp ziyaretçiye dönüş yapılabilir. Bunu sağlamak için Handler.php içinden aşağıdaki kod ile Model Not Found hatası yakalanıp farklı modelde isteğin aranması sağlanabilir.


use App\Models\Post; // Arama yapılacak model sınıflarını ekle
use Illuminate\Database\Eloquent\ModelNotFoundException; // ModelNotFoundException sınıfını ekle

public function render($request, Throwable $e)
    {
//Model hatasının olduğunu ve Model Hatasının Category Modeline ait olduğunu kontrol ediyoruz.
if ($e instanceof ModelNotFoundException && $e->getModel() =='App\Models\Category')
        {     
            $post = Post::where('slug', head($e->getids()))->first();
            if($post)
            {
                return response()->view('posts.show', ['post' => $post]);
            }            
        }

      return parent::render($request, $e); // Laravelin normal hata davranışa devam etmesini sağlıyoruz.
    }

posts.show view dosyasına verileri view metodunun içinden [‘post’ => $post] gönderiyoruz. with(‘posts’, $posts) şeklinde gönderim response() metodundan zincirleme yapıldığı için çalışmaz.