Laravel Hata Sayfalarını Özelleştirmek

21 Oca 2023
Laravel Hata Sayfalarını Özelleştirmek

Herkese merhaba,

Laravel'de örneğin geçerli olmayan bir rotaya gitmeye çalıştığınızda, sizi Laravel tarafından hazırlanmış standart bir 404 sayfası karşılar.

Bazı durumlarda, projelerimizde bu sayfaları özelleştirmek isteyebiliriz.

Önce bu hata sayfalarını nasıl özelleştirebileceğimizi ele alalım.

İlk olarak aşağıdaki komutu kullanarak Laravel'in hata sayfalarının resources/views/errors dizini altına publish edilmesini sağlıyoruz.

php artisan vendor:publish --tag=laravel-errors

Burada 401-403-404-500 vs.. çeşitli Laravel hata sayfaları artık bizi karşılıyor.

İçeriklerini istediğiniz gibi düzenleyebilirsiniz.

Peki ya örneğin admin panelinde gezerken Laravel'in standart hata sayfaları gelsin, ancak ön yüzde ise benim hata sayfalarım gelsin istersek?

Bunun için de Laravel'in Handler.php dosyasında küçük bir düzenleme yapmamız yeterli.

Öncelikle resources/views/errors içerisinde admin isimli bir klasör oluşturalım. Laravel'in hata sayfalarını bunun içine kopyalayalım.

resources/views/errors/admin içerisindeki hata sayfaları, Laravel'in klasik sayfaları ve sadece yönetim paneli rotalarında iken çalışacaklar.

resources/views/errors altındaki dosyalar ise sitemizin ön yüzünde iken çalışacak, bunların içerisine müdahale ederek istediğiniz tasarımı oluşturabilirsiniz.


Şimdi app/Exceptions/Handler.php dosyamıza gidelim.

Burada üst kısıma aşağıda gördüğünüz 2 importu ekleyelim.

use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpFoundation\Response;

Handpler.php sınıfı içerisindeki metodlara müdahale etmiyoruz.

renderHttpException adında kendi private metodumuzu yazacağız.

protected function renderHttpException(HttpExceptionInterface $e): Response
    {
        $this->registerErrorViewPaths();

        $view = "errors::{$e->getStatusCode()}";

        if(request()->is('admin/*')) {
            $view = "errors::admin.{$e->getStatusCode()}";
        }

        if (view()->exists($view)) {
            return response()->view($view, [
                'errors' => new \Illuminate\Support\ViewErrorBag,
                'exception' => $e,
            ], $e->getStatusCode(), $e->getHeaders());
        }

        return $this->convertExceptionToResponse($e);
    }

İşlemler tamam.

Artık /admin ile başlayan rotalarda iken resources/views/errors/admin içerisindeki hata sayfaları çalışacak. Örn: resources/views/errors/admin/404.blade.php

Website ön yüz kısmında gezer iken(yani admin ile başlamayan tüm rotalar) resources/views/errors içerisindeki hata sayfaları çalışacak. Örn: resources/views/errors/404.blade.php

Bir başka yazıda görüşmek dileğiyle...

YAZAR : Boran BAR
Chat on WhatsApp