Laravel Middleware Kullanımı

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 😊

 

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıLaravel Üzerinde Gzip İşlemi
Sonraki YazıVue.js Instance Oluşturma
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz