Başlarken
Görünüm ve Arayüz
Veritabanı ve ORM
Rotalar ve Yönlendirme
Özet: Laravel yönlendirme (routing) mekanizması, rota tanımlama, parametreler, isimlendirilmiş rotalar, rota grupları ve model bağlama.
Rotalar ve Yönlendirme (Routing)
En temel Laravel rotaları bir URI ve bir Closure (isimsiz fonksiyon) kabul ederek, karmaşık yönlendirme yapılandırma dosyalarına gerek duymadan basit ve anlamlı bir rota tanımlama yöntemi sunar.
Tüm Laravel rotaları, projenizin routes/ dizininde yer alan rota dosyalarında tanımlanır. Web arayüzü rotaları routes/web.php dosyasında yer alırken, API rotaları routes/api.php dosyasında yapılandırılır.
Temel Rotalar
En basit rota tanımı routes/web.php dosyasında bir URI ve bir Closure ile yapılır:
use Illuminate\Support\Facades\Route;
Route::get('/merhaba', function () {
return 'Merhaba Dünya!';
});
Mevcut Rota Yöntemleri
Yönlendirici (Router), tüm standart HTTP fiillerine yanıt veren rotalar tanımlamanıza olanak tanır:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Bazen birden fazla HTTP fiiline yanıt veren bir rota kaydetmeniz gerekebilir. Bunun için match yöntemini kullanabilirsiniz:
Route::match(['get', 'post'], '/', function () {
// ...
});
Tüm HTTP fiillerine yanıt veren bir rota tanımlamak için ise any yöntemi kullanılır:
Route::any('/', function () {
// ...
});
Yönlendirme Rotaları (Redirect Routes)
Başka bir URI'ye yönlendirme yapan bir rota tanımlıyorsanız Route::redirect yöntemini kullanabilirsiniz:
Route::redirect('/eski-yol', '/yeni-yol');
// 301 Kalıcı yönlendirme için:
Route::permanentRedirect('/eski-yol', '/yeni-yol');
Görünüm Rotaları (View Routes)
Rotanız yalnızca bir Blade görünümü (view) döndürecekse Route::view kısa yolunu kullanabilirsiniz:
Route::view('/hakkimizda', 'about', ['name' => 'Laravel Türkiye']);
Rota Parametreleri
Zorunlu Parametreler
Bazen rotanızda URI bölümlerini yakalamanız gerekir. Örneğin bir kullanıcının kimlik numarasını (ID) URI'den alabilirsiniz:
Route::get('/kullanici/{id}', function (string $id) {
return 'Kullanıcı ID: ' . $id;
});
İhtiyacınız olan sayıda rota parametresi tanımlayabilirsiniz:
Route::get('/gonderi/{post}/yorum/{comment}', function (string $postId, string $commentId) {
return "Gönderi: {$postId}, Yorum: {$commentId}";
});
İsteğe Bağlı Parametreler
Bazen URI'de bir parametrenin bulunması zorunlu olmayabilir. Bu durumda parametre adının sonuna ? işareti koyabilir ve ilgili değişkene varsayılan bir değer atayabilirsiniz:
Route::get('/kullanici/{name?}', function (?string $name = 'Misafir') {
return "Hoş geldin, {$name}";
});
Düzenli İfade (Regex) Kısıtlamaları
Rota parametrelerinizin biçimini where yöntemiyle sınırlandırabilirsiniz:
Route::get('/kullanici/{name}', function (string $name) {
// ...
})->where('name', '[A-Za-z]+');
Route::get('/kullanici/{id}', function (string $id) {
// ...
})->where('id', '[0-9]+');
// Sıklıkla kullanılan kalıplar için yardımcı yöntemler:
Route::get('/kullanici/{id}/{name}', function (string $id, string $name) {
// ...
})->whereNumber('id')->whereAlpha('name');
Route::get('/kullanici/{id}', function (string $id) {
// ...
})->whereUuid('id');
İsimlendirilmiş Rotalar (Named Routes)
İsimlendirilmiş rotalar, belirli rotalar için kolayca URL veya yönlendirme oluşturmanıza olanak tanır:
Route::get('/profil', [UserProfileController::class, 'show'])->name('profile');
Tanımlanan bu isme göre URL üretmek için global route fonksiyonunu kullanabilirsiniz:
// URL Üretimi:
$url = route('profile');
// Yönlendirme Üretimi:
return redirect()->route('profile');
Parametre alan isimlendirilmiş rotalarda parametreleri ikinci argüman olarak iletebilirsiniz:
Route::get('/kullanici/{id}/profil', function (string $id) {
// ...
})->name('profile');
$url = route('profile', ['id' => 1, 'photos' => 'yes']);
// Çıktı: /kullanici/1/profil?photos=yes
Rota Grupları
Rota grupları; ara katmanlar (middleware), önekler (prefixes) veya ad alanları gibi rota özniteliklerini, her rotada tek tek tanımlamadan toplu olarak uygulamanızı sağlar.
Ara Katman (Middleware) Grubu
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
// Yalnızca kimliği doğrulanmış kullanıcılar erişebilir...
});
Route::get('/hesap', function () {
// ...
});
});
Denetleyici (Controller) Grubu
Bir grup rota aynı denetleyiciyi kullanıyorsa, controller yöntemini kullanarak denetleyiciyi ortaklaştırabilirsiniz:
use App\Http\Controllers\OrderController;
Route::controller(OrderController::class)->group(function () {
Route::get('/orders/{id}', 'show');
Route::post('/orders', 'store');
});
Rota Önekleri (Route Prefixes)
prefix yöntemi gruptaki her rotaya belirli bir URI öneki eklemek için kullanılır:
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
// "/admin/users" adresine eşleşir
});
});
İsim Önekleri (Name Prefixes)
name yöntemi gruptaki her rota adına bir ön ek ekler:
Route::name('admin.')->prefix('admin')->group(function () {
Route::get('/users', function () {
// ...
})->name('users'); // Rota adı: "admin.users"
});
Rota Model Bağlama (Route Model Binding)
Bir denetleyici veya rota Closure'ına bir model kimliği enjekte edildiğinde, genellikle veritabanından ilgili kimliğe karşılık gelen kaydı sorgularsınız. Laravel Rota Model Bağlama mekanizması, doğrudan model örneklerini rotanıza enjekte ederek bu süreci otomatikleştirir.
Örtük Bağlama (Implicit Binding)
Rota parametresi adı ile denetleyici/Closure tip belirteci eşleştiğinde Laravel modeli otomatik olarak çözer:
use App\Models\User;
Route::get('/users/{user}', function (User $user) {
return $user->email;
});
{user} parametresi App\Models\User türüyle eşleştiğinden, gelen URI'deki değer User tablosunda id sütununda aranır. Eğer eşleşen model bulunamazsa otomatik olarak bir 404 HTTP yanıtı üretilir.
Özel Anahtar Kolonu Kullanımı
Bağlama işlemini id dışında bir sütuna (örneğin slug) göre yapmak için parametre içinde sütun belirtebilirsiniz:
use App\Models\Post;
Route::get('/posts/{post:slug}', function (Post $post) {
return view('posts.show', ['post' => $post]);
});
Geri Dönüş Rotaları (Fallback Routes)
Gelen istekle hiçbir rota eşleşmediğinde çalışacak bir geri dönüş rotası tanımlamak için Route::fallback yöntemini kullanabilirsiniz:
Route::fallback(function () {
return view('errors.404');
});
Rota Listesini Görüntüleme
Uygulamanızda tanımlı tüm rotaları, isimlerini ve atanmış ara katmanları terminal üzerinden listelemek için Artisan komutunu kullanabilirsiniz:
php artisan route:list