Laravel Middleware Kullanımı
Herkese merhabalar , bu yazımızda sizlerle beraber laravel ile beraber middleware oluşturma işlemlerine göz atıyor olacağız.
Öncelikle nedir bu middleware diyecek olursak, middleware ismindende anlaşılabileceği gibi aslında bir ara katman bir ara yazılım bir ara işlem gibi düşünebiliriz. Ne demek istiyoruz örneğin biz havaalanından geçmek istiyoruz ve orada ilgili xray cihazlarından , yahutta çeşitli kimlik kontrollerinden geçip o şekilde bekleme salonuna doğru yada uçağımıza geçiyoruz. İşte middlewareler de tam olarak bu controllerımıza istek gelmeden önce çeşitli kontrollerden geçirip daha sonra ilgili controllerlara yönlendirilmesi işlemi.
Şimdi şöyle bir örnek yapalım, örneğin bizim endpointlerimize yalnızca yaşı 20 den büyük olan ve adı ahmet olan kullanıcılar istek yapabilsin diğer kullanıcıların istekleri red edilsin. O zaman hadi başlayalım.
Proje Oluşturma
composer create-project laravel/laravel example-app
cd example-app
php artisan serve
Middleware Oluşturma
php artisan make:middleware AgeControlMiddleware
php artisan make:middleware NameControlMiddleware
dedikten sonra oluşan age ve name control middlewarelerimiz app\http\Middleware
altında bulabiliriz.
Şimdi age middleware kodlayalım;
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;class AgeControlMiddleware
{
public function handle(Request $request, Closure $next)
{
if($request->age>20){
return $next($request);
}else{
return response()->json('Yaşınız 20den kucuk oldugun için bir yere gidemezsiniz',400);
}}}
öncelikle request içerisindeki age field ele alıp basit bir yaş kontrolü yapıyoruz, eğer yaş 20 den büyükse $next diyerek mevcut request ile birlikte geçmesine izin veriyoruz, hayır 20 den küçük ise geriye response döndürüyoruz.
Şimdi name middleware kodlayalım ;
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;class NameControlMiddleware
{
public function handle(Request $request, Closure $next)
{
if($request->name=="ahmet"){
return $next($request);
}else{
return response()->json("İsminiz Ahmet Değil Geçemezsiniz", 400);
}}}
age middleware de olduğu gibi buradada $request içerisindeki name field kontrol edip isim ahmet ise geçmesine izin verip , değil ise geçemeyeceğini belirtiyoruz.
İlgili middlewareleri oluşturduk, fakat Laravelin bundan haberi henüz yok, işte bunun için laravele gelip hey Laravel ben iki tane middleware sahibim seninde bundan haberin olsun demek için app\http\Kernel
içerisinde gidip
protected $routeMiddleware = ['age'=>\App\Http\Middleware\AgeControlMiddleware::class,'name'=>\App\Http\Middleware\NameControlMiddleware::class,...];
yazmış olduğumuz middleware register ediyoruz. Artık middlewarelar kullanıma hazır.
routes\api
içerisine gelip basitçe test adında bir endpoint oluşturuyorum ve içerisinde sırayla age ve name middleware kontrolünden geçeceğini belirtiyorum, burada dikkat etmemiz gereken şey ilgili kontrollerin(middlewareların) sırasıyla tetikleneceği
Route::post('/test',function (Request $request){return response()->json('Yaş ve Ad Kontrolünden Başarıyla Geçtiniz',200);})->middleware(['age','name']);
son olarak tek yapmamız gereken şey ise ilgili endpointe istek atmak;
Herkese İyi Çalışmalar Dilerim.