Laravel Middleware Kullanımı
Hepinize merhaba dostlarım 😊. Yoğun ve yorucu ama bir o kadar da keyifli geçen bir haftanın ardından gelen pazar gününü sizlerle beraber yeni bir konu ile şekillendirmek istedim 😊. Her zamanki gibi yüksek olan heyecanınız ile bu hafta da birkaç dostumun merakla sorduğu sorular öncesinde ben blog yazılarımda bir şey sezdim:
Bir önceki yazımda "Laravel Üzerinde Gzip İşlemi" (Link Burada) Gzip işleminden bahsetmiştim. Konu güzel anladığınıza canı gönülden inanıyorum. Ama ben orada normal bir yapıdan ziyade Middleware yapısını kullandım. Şimdi konuya aşina olan ve uzun süredir Laravel yazan dostlarım direkt olarak anlamıştır. Ama ben direkt olarak geçmek yerine konunun temel amacından bahsedeceğim
Middleware Nedir ?
Eveeeeet dostlarım artık konumuza yavaş yavaş girişimizi ferçekleştirdik. Şimdi klavyeyi ve mouse tamamen kendi halinde dursun arkanıza yaslanın ve beni dinleyin 😊.
Şimdi dostlarım Middleware Türkçe karşılığına da değinmek olursa Ara Katman olarak bilinen bu yapı uygulamalarımızda bir katman oluşturmamıza yarıyor. Katman deyince çok gözünüzde büyüyen bir şey olmasın konu basit. Aklınıza hemen şu soru gelmiş olabilir dostlarım
Hocam katman dediniz konuya ufak bir odaklandık. Yani zihnimizde ufak bir yapı belirdi. Biraz daha açar mısınız size zahmet
Tabii ki dostlarım 😊. Siz isteyin yeter
Şöyle ki dostlarım. Normalde biz gelen http isteklerini (GET veya POST) oluşturduğumuz controller içinden yakalarken middleware kullandığımızda işlem tamamen şu oluyor
Controller kankam sen rahatına bak. Developer in gönderdiği şartları ben hallederim ona göre sana işi paslarım. Sen devam et sıkıntı yok
şeklinde bir diyalog gerçekleşiyor. Farkındaysanız controller üzerine binecek olan iş yükünü azalttık ve daha düzenli bir yapıyla kodumuzu yazdık. İşte bütün işlemler bu kadar basit dostlarım.
Amaaaa şimdi sizin aklınızda bir soru daha var dostlarım bunu seziyorum ben
Hocam şu an mantığı kavradık çok sağolun. Ama biz bunu nasıl oluşturacağız nasıl kullanacağız bunu bilmiyoruz şu an
Tam da ben o kısma geçiyordum dostlarım. Sizin de bunu demeniz isabetli oldu. O halde hemen laravel ortamlarımızı kuralım ve yavaştan ilk middleware dosyamızı oluşturalım
Middleware Dosyamızı Oluşturalım
Eveeeet artık laravel dosyamızı oluşturduğumuza göre dostlarım hemen terminal ekranımızı açalım dostlarım ve buraya
php artisan make:middleware DenemeMiddleware
şeklinde örnek bir middleware dosyası oluşturalım. İsmi rastgele bu şekilde verdim dostlarım siz istediğiniz ismi verebilirsiniz 😊. Bu kodu yazdıktan sonra dostlarım bize app/Http/Middleware yolu altında DenemeMiddleware.php dosyası görünecektir. Hemen bu dosyamızın içeriğine bir bakalım
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class DenemeMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
return $next($request);
}
}
şeklinde bir yapı bizim karşımıza çıkacaktır. Örnek olarak bu kısımda bir kontrol yapalım. Bu da gelen plaka kodu 81 den büyük ve 0 dan küçük ve eşit ise Türkiye'de böyle bir plaka kodu yok , eğer 1 ile 81 arasında ise (1 ve 81 dahil) Türkiye'de böyle bir plaka kodu mevcut yazdırılmasını gerçekleştirelim. Hemen kodumuza gelelim ve
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class DenemeMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if ($request->plaka > 81 || $request->plaka<=0){
echo "Türkiye'de Böyle Plaka Yok";
}else{
echo "Türkiye'de Bu Plaka Mevcut";
}
return $next($request); // burayı silmeyin dostlarım yoksa yönlendirme olmaz :)
}
}
şeklinde kodlarımızı düzenledik. Şimdiiiii örnek olarak biz bu middleware mizi kullanabilmemiz için (özellikle route dosyalarında sıklıkla kullanılıyor bu middleware çok sık orada gördüm bu güne kadar) bir takma isim vermemiz lazım. Bunun için de app/Http/Kernel.php içerisine gelip
<?php
.
.
..
.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'deneme' => DenemeMiddleware::class, // bunu eklememiz gerekiyor dostlarım örnek olarak deneme ismini verdim siz istediğiniz ismi verebilirsiniz
];
şeklinde kodlarımızı yazdık. Daha sonrasında ise dostlarım web.php içerisine gelelim ve
<?php
use Illuminate\Support\Facades\Route;
// örnek olarak view veya controller oluşturmamıza gerek yok dostlarım işin mantığından bahsedeceğim için fazla derine inmek istemedim
Route::get('/', function () {
return "
<form method='post' action='".\route('plaka_sorgula')."'>
<input type='hidden' name='_token' value='".csrf_token()."'>
<input type='text' name='plaka' placeholder='Plaka Numarası Giriniz'>
<br>
<button type='submit'>Plaka Analiz</button>
</form>
";
});
// gelen isteği de burada yakalayacağız
Route::post('/plaka-sorgula',function (){
})->name('plaka_sorgula')->middleware('deneme');
şeklinde kodlarımızı yazdık dostlarım. fark ettiyseniz
->middleware('deneme')
olarak kodumuzu yazdık yani dedik ki
Kardeşim sen 'deneme' takma isimli middleware dosyasını bul ve bu rotasyona istek geldiğinde direkt olarak bunu gör ve bu rotasyon içindekiler çalışmadan önce orada bir kontrol et
şeklinde kodlarımızı yazdık dostlarım. Şimdiiiii artık gelelim dostlarım terminalimize ve uygulamamızı çalıştıralım
php artisan serve
komutumuzu verdik ve kodlarımızın çalışmasını gerçekleştirdik. Karşımıza gelecek olan ekran
şeklinde karşımıza çıkacaktır. Ben buraya gelip mesela 34 yazdığımda karşıma gelecek olan sonuçta
Türkiye'de Bu Plaka Mevcut
yazacaktır. Ama gelip -10 veya 0 yazdığımda ise karşıma gelecek olan sonuç
Türkiye'de Böyle Plaka Yok
olacaktır dostlarım 😊. Bütün işlemler bu kadar basit
Middleware Harici Olarak Nerelede Kullanılır ?
Eveeeeet dostlarım geldik bir diğer kısma. Yukarıda hafiften de olsa middleware olayına ufaktan bir göz attık ve ufak örnek yaptık. Sizin aklınızda olan soruya da ufaktan girişi yapalım 😊
Tamam bu şekilde kullanımı var da daha başka yerlerde kullanılmıyor mu ya ?
şeklinde dediğinizi duyar gibiyim dostlarım. Elbette kullanılıyor
mesela e-ticaret sistemi kodluyorsunuz varsayalım ve kullanıcının ürün olmadan sepetine girişini kısıtlamak istiyorsunuz diyelim. Bu kısımda middleware kullanabilirsiniz.
Veya bir smm panel benzeri bir yazılım kodladınız veya üyelik sistemine göre (Pro, Gold, Bronz vb.) bir yazılıım kodladınız. Üyeliklere göre diğer paketlerin içeriğini gizleme gibi olaylar yapabilirsiniz bu uzar gider 😊
Eveeeeet dostlarım 😊. Bu yazımda sizlere elimden geldiğince dilim döndüğünce "Laravel Middleware Kullanımı" konusunu anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin 😊. Konu başlarda biraz karmaşık veya zor gelmiş olabilir anlıyorum. Özellikle öğrenme süreci içeriisnde bu gibi durumlarla karşılaşmanız son derece doğaldır. Bu süreç içerisinde sizlerden istediğim tek şey har yazımda da dediğim gibi "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız 😊". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır 😊
Aynı zamanda 25 Aralık 2022 de kurmuş olduğum seyyaryazilimci.com soru cevap sitesi üzerinde yazılımda takıldığınız konuları sorabilir, aynı durumda olan yazılımcı dostlarımıza yardımda bulunabilirsiniz. Sorular ve cevaplar belirli bir süre admin onayından geçerek sistem üzerinde yayınlanmaktadır dostlarım bilginize 😊
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊
Yazar Hakkında
Kendi Halinde Bir Backend Developer