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.

php artisan make:middleware MyMiddleware

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.

//App/Http/Middleware/MyMiddleware
    public function handle(Request $request, Closure $next)
    {
        if(true){
            echo "MyMiddleware Çalıştı"; 
        }
        return $next($request);
    }

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.

use App\Http\Middleware\MyMiddleware;
Route::get('/',function(){
    echo "<br>Burda bir controller fonsiyon çalışacak";
})->middleware(MyMiddleware::class);
/*
Ekran Çıktısı:
MyMiddleware Çalıştı
Burda bir controller fonsiyon çalışacak
*/

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.

php artisan make:middleware MyMiddleware_2

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.

public function handle(Request $request, Closure $next)
{

    if(true){
        echo "<br />MyMiddleware_2 çalıştı.";
    }
    return $next($request);
}

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.

use App\Http\Middleware\MyMiddleware;
use App\Http\Middleware\MyMiddleware_2;
Route::get('/',function(){
    echo "<br>Burda bir controller fonsiyon çalışacak";
})->middleware([MyMiddleware::class,MyMiddleware_2::class]);
/*
Ekran Çıktısı : 
MyMiddleware Çalıştı
MyMiddleware_2 çalıştı.
Burda bir controller fonsiyon çalışacak
*/

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.

use App\Http\Middleware\MyMiddleware;

Route::middleware(MyMiddleware::class)->group(function(){
    Route::get('/',function(){
        echo "<br />Anasayfa Çalıştır";
    });
    Route::get('/login',function(){
        echo "<br />Login Sayfası Çalıştı.";
    });
});

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.

//rotes/web.php
Route::get('/test',function(){
    echo "<br />Controller çalıştı.";
})->middleware('MyMiddleware:40');
/*
Ekan çıktısı:
Gelen parametre numeric id : 40
Controller çalıştı.
*/

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

public function handle(Request $request, Closure $next,$id)
    {
        if(is_numeric($id)){
            echo "Gelen parametre numeric id : ".$id;
        }else{
            echo "Gelen id numeric değil!".$id;
        }
        return $next($request); 
    }

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.

public function handle(Request $request, Closure $next)
{
    if(true){
       echo "Middleware Çalıştı.<br />";
    }

    return $next($request); 
}

public function terminate($request, $response)
{
    echo "<br > En son çalışır.";
}

Daha sonra route düzenleyelim.

use App\Http\Middleware\MyMiddleware;

Route::get('/',function(){
    echo "<br />Controller çalıştı.";
})->middleware(MyMiddleware::class);
/*
Ekran Çıktısı:

Middleware Çalıştı.

Controller çalıştı.
En son çalışır.
*/

 

 

Shares:

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir