Laravel 8 Middleware (Ara Yazılım) Kullanımı

Laravel 8 Middleware (Ara Yazılım) Kullanımı

Tarhi : 02-01-2021 12:40:51 | Yazar : ÇAĞLAR BOSTANCI

Merhaba. Laravel middleware ara yazılım olarak geçer. Öreneğin bir post veya sayfa yönlendirmelerinde controller klasını ulaşmadan yapmanız gerenkenleri bu ara yazılımda yapabilirsiniz. Bu bize controller da yapacağınız işlemleri ön filitrelemeden de geçirmek diyebiliriz. Bir diğer örnek verecek olursak, her sistemde mecut olan oturum kontrol sistemlerini middleware ile daha kolay yapabiliriz. Oturum açmamış bir kullanıcıyı laravel middleware ile kontrol ettikten sonra ilgili sayfaya yönlendirmesini sağlayabiliriz. Larevelde tanımlamış olduğunuz middleware ara yazılımlar projenizin app/Http/Middleware klasörü altında oluşturlur. Şimdi uygulamalar üzerinden anlatalım.

İlk olarak middleware oluşturalım. Laravel middliware oluşturmak için consola aşağıdaki komudu girelim.

Bu komuttan sonra App/Http/Middleware dizini altında MyMiddleware.php oluşmaktadır.Klass içerisindeki public function handle(Request $request, Closure $next){} fonksiyonunu aşağıdaki gibi düzenleyelim.

Sonra bu

routes/web.php

dosyasını açlım ana dizin yönlendirmesin de kullanılacak Rotue::get() fonksiyonumuzu yazalım ve oluşturduğumuz MyMiddleware bağlayalım. Tabi bunları yapmadan önce

routes/web.php

sayfamıza oluşturduğumuz MyMiddleware klasımızı burdaki gibi use App\Http\Middleware\MyMiddleware; çağıralım.

Sistem ilk etapta http://localhost:8000/ url istekte bulunduğunda routes/web.php çalıştı. Bu url için belirtmiş olduğumuz route tetikledi. İlgli route’nin sonuna eklemiş olduğumuz ->middleware(MyMiddleware::class) çalıştırdı. Klass içerisindeki handle fonksiyonu içerinsindeki kod bloğu çalıştı. Fonksiyon içerisndeki karar yapısına true dediğimiz için ekranan “MyMiddleware Çalıştı” yazdı ve daha sonra route içersinde controlleren geleceği yerdeki fonksiyonu çalıştırdı. Bu fonksiyonda ekrana “Burda bir controller fonsiyon çalışacak” yazdıktan sonra sistem sonlandı.

Middleware için web.php’de çağırmış olduğumuz dosyayı isterseni sayfa yüklenirken oto yüklenmesini sağlayabiliriz. App\Http\Kernel.php dosyasını açalım ve içersinde protected $routeMiddleware yazılı olan dizinin sonuna 'MyMiddleware'=>\App\Http\Middleware\MyMiddleware::class sınfını ekleyelim. Artık web.php phpde çağırmanıza gerek kalmadı. Her seferinde ana sistem kendisi yükleycek.

Laravel Birden Fazla Middleware Kullanımı

Birden fazla middleware kullanmak istiyorsak öncelikle bir tanedaha middleware oluşturalım.

App/Http/Middliware/MyMiddleware_2 dizininde bir middleware daha oluşturduk. İçersindeki public function handle(Request $request, Closure $next) aşağıdaki gibi düzenleyelim.

Daha sonra web.php dosyamıza use App\Http\Middleware\MyMiddleware; use App\Http\Middleware\MyMiddleware_2; sınfılarımızı çağıralım ve aşağıdaki rotue ekleyelim.

Bu sayede iki adet middleware çaştırmış olduk. Tabi handle fonksiyonunda yapmış if karar yapısında redirect ile sayfa yönlendirmleri veya gelen sayfaya hata gönderimi yapabilirsiniz.

Laravel Middleware Group Kullanımı

Oluşturmuş olduğumuz middleware sınıfını birden çok sayfada kullanamamız gerekiyorsa aşağıdaki gibi gruplama yapabiliriz.

Url üzerinden ‘/’,’/login’ isteklerinde bulunulduğunda her iksindede MyMiddleware classımız çalışmış olacak. Gruplarda da birden fazla middleware çalıştırmak istiyorsanız aşağıdaki gibi dizi şeklinde tanımlamalısınız.

Laravel Middleware Parametre Gönderme

İsterseni middleware ara yazılımınıza var olan parametrelerin haricinde daha fazla parametere gönderebilirsiniz. Önce karnel.php’de sınıfımızın kendi kendine yüklenmesini sağlamak için 'MyMiddleware'=>\App\Http\Middleware\MyMiddleware::class, tanımlamamızı yapıyoruz. Daha sonra web.php’de rotamızı belirliyoruz.

En önemli kısmı ise MyMiddleware sınıfımızda aşağıdaki gibi düzenliyoruz.

Laravel Middleware Terminate Kullanımı

Middleware çalışıp tarayıcıya yanıt verildikten sonra çalışmasını istediğiniz işlemler olabilir bunu aşağıdaki gibi yapabiriz. Middleware düzenleyelim önce.

Daha sonra route düzenleyelim.