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.