Laravel 5 Framework Middleware Kavramı

Merhaba arkadaşlar bu yazımda sizlere Middleware kavramından bahsedeceğim. Bu olay HTTP isteği sırasında araya girer tanımladığınız işlemleri gerçekleştirir. Örneğin bir rota tanımladınız ama kullanıcının giriş yapmasını mecburi kılmak istiyorsunuz. Bunun için bir middleware kullanabilirsiniz.

Middleware Oluşturma

php artisan make:middleware MiddlewareAdi

app\Http\Middleware klasörü altında MiddlewareAdi isminde bir PHP dosyası oluşturacaktır. İçerisinde bazı kodlar hazır olacaktır.

<?php

namespace App\Http\Middleware;

use Closure;

class MiddlewareAdi
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }
}

Bu ara katmanımı kullanabilmek için Http klasörünün içinde bulunan Kernel.php dosyasını düzenlemem gerekiyor. Burada ara katmanımı tanımlıyorum.

/**
 * The application's route middleware.
 *
 * These middleware may be assigned to groups or used individually.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'middleware_adi' => \App\Http\Middleware\MiddlewareAdi::class,
];

middleware_adi ile ara katmanımızı rotalar için tanımladık. Bunu nasıl rotanın arasına koyacağız. Bunun için rota sınıfımızda middleware methodu var.

Route::get('/', function () {
    return "Middleware araya girdi geçti.";
})->middleware('middleware_adi');

Bu şekilde rotayı çalıştırdığımızda araya girmiyor gibi normal bir şekilde rota çalışacaktır. Bunun sebebi ara katman içerisinde herhangi bir işlem yapmadan devam etmesini istiyoruz.

Şimdi middleware üzerinde bir müdahale yapalım.

<?php

namespace App\Http\Middleware;

use Closure;

class MiddlewareAdi
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
    if(true) {
      return response("Middleware olarak olaya el koydum.");
    }
    
        return $next($request);
    }
}

Rotayı çalıştırdığımızda karşımıza middleware içerisinde dönen kodlar çalışacaktır. Koşul doğru olduğundan rotaya çalışma fırsatı vermiyoruz.

Middleware Parametre Kullanımı

Örneğin bir üyenin yetkisini kontrol etmek istiyorsunuz ve bazı rotalarda Üye bazı rotalarda Yönetici kontrolü yapmak istiyorsunuz. Bunun için birden fazla ara katman oluşturmak yerine tek bir katman üzerinden parametre göndererek yapabiliriz. Parametre işlemine hemen örnek verelim. Ara katman kısmında kodlarda parametreyi belirleyelim. Tekrardan örnek vermemek adına birden fazla parametre kullandım.

<?php

namespace App\Http\Middleware;

use Closure;

class MiddlewareAdi
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $parametre, $parametre2)
    {
    if(true) {
      return response("Parametre olarak gelen değerler: {$parametre}, {$parametre2}");
    }
    
        return $next($request);
    }
}

Şimdi bu rotamızı parametre için ayarlayalım.

Route::get('/', function () {
    return "Middleware araya girdi geçti.";
})->middleware('middleware_adi:parametre değeri 1,parametre değeri 2');

Şimdi rotamızı çalıştıralım.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir