Laravel 9 - Rota Yapısı (Routing)

Laravel 9 - Rota Yapısı (Routing)

Merhaba arkadaşlar, Bugün ki yazımızda Laravel 9 Rota yapısı hakkında çok detaya girmeden, kafaları karıştırmadan bilgi vermeye çalışacağım.

Basit Rota Yapısı

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {
    return 'Hello World';
});

En basitiyle yukardaki selamlama rotasına gittiğinizde ekrana sadece Hello World yazacaktır.

Varsayılan Rota Dosyaları

routes klasörümüz içerisinde şu anlık bizi ilgilendiren iki adet dosya bulunmaktadır. Bunlar web.php ve api.php 'dir.

web.php: Kısaca ve kabaca full-stack uygulamalarda kullanılan rota diyebiliriz. Yani burada yazdığımız rotaları uygulama içerisinde direkt kullanmaktayız.

api.php: İsminden de anlaşılacağı üzere çoğunlukla sadece backend'ini yazacağımız rotalar için kullanmaktayız. Bu dosyada yazacağımız rotalar otomatik olarak api/ prefix'ine sahip olur.

İlk örnekten ilerleyecek olursak web.php içerisine yazarsak siteadresi.com/greeting ile rotayı çağırabilirken, api.php içerisine yazarsak siteadresi.com/api/greeting ile rotayı çağırmalıyız.

Kullanılabilir Rota Metodları

Rotalar herhangi bir http istediği yönlendirmenize imkan sağlar. Kullanılabilir rota yapıları en basit düzeyde aşağıdaki gibidir.

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Bazı durumlarda bazı http isteklerini aynı yere yönlendirmek isteyebilirsiniz. Bunun için;

Route::match(['get', 'post'], '/', function () {
    //
});

kullanabilirsiniz. Eğer tüm http isteklerini aynı yere yönlendirmek isterseniz;

Route::any('/', function () {
    //
});

kullanmak sizin için yeterli olacaktır.

Yeniden Yönlendirmeler

Rotanızı farklı bir rotaya yönlendirme yapmak istediğinizde;

Route::redirect('/here', '/there');

şeklinde yönlendirme yapabilirsiniz. Route::redirect varsayılan olarak 302 durum kodu ile yönlendirme yapar. Bunu değiştirmek için üçüncü bir parametre verebilirsiniz.

Route::redirect('/here', '/there', 301);

veya 301 durum kodu ile yönlendirme yapmak için direkt;

Route::permanentRedirect('/here', '/there');

kullanabilirsiniz.

View Döndüren Rotalar

Route::view('/welcome', 'welcome');

Route::view('/welcome', 'welcome', ['name' => 'Fatih']);

Route:view ile view döndüren rotalar yapabiliriz. Yukarıdaki ilk örneği inceleyecek olusak; siteadresi.com/welcome adresinde girdiğimiz zaman resource/views içerisindeki welcome.blade.php dosyamızı çağırıp ekrana basmaktadır. İkinci örnek için bu view dosyasının içerisinde bulunan $name değişkenini belirleyebiliyoruz. Örneğin;

#welcome.blade.php
Merhaba, {{$name}}
#web.php
Route::view('/selamla', 'welcome', ['name' => 'Fatih']);

Eğer siteadresi.com/selamla adresine girersek; Merhaba, Fatih sonucunu göreceğiz.

Rota Listesi

Eğer mevcuttaki tüm kullanılabilir rota listemizi görmek istersek aşağıdaki gibi görebiliriz.

php artisan route:list

Rota Parametreleri

Zorunlu Parametreler

En basit olarak bazı durumlarda özellikle veri tabanından kayıt çekerken çekilecek kaydın id veya slug'ını kullanıcıdan almak durumunda kalabiliriz. Bu durumlarda bu rotaya bu değeri zorunlu bir parametre olarak eklemeliyiz.

Route::get('/blog/{slug}', function ($slug) {
    //Slug ile blog'u çekip geri döndürebiliriz
});

Opsiyonel Parametreler

Eğer zorunlu parametre rotadan gelmediği takdirde böyle bir rota yok hatası yerine varsayılan bir değerle işlem yapmak istersek bunu rotamıza tanımlayabiliriz.

Route::get('/blog/{slug?}', function ($slug= 'laravel-9-kurulumu') {
    //Eğer slug değeri gelmezse laravel 9 kurulumu blogunu döndürecek.
});

Rota İsimlendirme

Yazmış olduğumuz rotalara isim vererek kullanacağımız yerlerde bu isimle çağırarak kullanabiliriz.

Route::get('/user/profile', function () {
    //
})->name('profile');

Kullanımı :

// Url oluşturma
$url = route('profile');

// Url yönlendirmesi
return redirect()->route('profile');

Rota Grupları

Rota grupları rota özelliklerini ayrı ayrı tanımlamanız yerinde topluca yönetmenizi sağlar.

Middleware

Birden fazla rotaya aynı middleware kurallarını uygulamak isterseniz bunları ortak bir şekilde yapabilirsiniz.

Route::middleware(['birinci', 'ikinci'])->group(function () {
    Route::get('/', function () {
        // Birinci ve ikinci middleware ara katmanlarını kullanır
    });

    Route::get('/user/profile', function () {
        // Birinci ve ikinci middleware ara katmanlarını kullanır
    });
});

Controllers

Aynı kontrolcüyü kullanan rotalar ortak bir şekilde sadece fonksiyon isimlerini çağırarak kullanılabilir.

use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
    Route::get('/orders/{id}', 'show');
    Route::post('/orders', 'store');
});

Subdomain

Farklı alt alan adları için aynı işlemi yapacak rotalar için kullanılabilir.

Route::domain('{username}.example.com')->group(function () {
    Route::get('user/{username}', function ($username) {
        //Kullanıcı adının profilini döndürebiliriz
    });
});

Prefix

Farklı rotalar için ortak prefix belirleyebiliriz.

Route::prefix('admin')->group(function () {
    Route::get('/blogs', function () {
        // "/admin/blogs"
    });

    Route::get('/users', function () {
        // "/admin/users" 
    });
});

İsimlendirerek de kullanabiliriz.

Route::name('admin.')->group(function () {
    Route::get('/users', function () {
        // "admin.users"
    })->name('users');
});

Temel olarak şimdilik bu kadar rota yapısı öğrenmek yeterli. Diğerlerinin daha anlaşılır olması için ilerideki anlatacağım örneklerle pekiştirilmesi gerekebilir. Yine de ben hepsine göz gezdirmek istiyorum diyenler kendi dokümantasyonu üzerinden inceleme yapabilirler.