Merhaba arkadalar bu kategoride sizlere laravel 8 sürümü ile destek vereceğim. Laravel 8 ile route yönlendirmelerinde güncelleme oldu. Eski sürümlere göre yaptığınız Route::get() yönlendirmelerini laravel 8 de denediğinizde hata sayfasıyla karşılacaksınızdır. Bu yazıda sizlere laravel 8’in route yönlendirmeleri hakkında bilgi paylaşımı yapacağım. Öncelikle bildiğiniz gibi laravel route yönlendirmeleri projeniz/routes|web.php dizininde yapılmaktadır. İlk olarak olağan bir yönlendirme yapalım.
1 2 3 4 |
Route::get('/',function(){ return "Merhaba Laravel 8";}); //ilk ana dizine gelindiğinde ekrana "Merhaba Laravel 8" yazacak. |
Laravel 8 ile gelen yeni route yönlendirmesine bir örnek yapalım. Öncelikl MerhabaController adında bir tane Controller oluşturalım.
1 2 3 |
php artisan make:controller MerhabaController |
Daha sonra MerhabaController’ımızı açalım ve içerisine aşağıdaki selam fonksiyonunu oluşturalım.
1 2 3 4 5 |
public function selam(){ return "Merhaba Laravel 8"; } |
routes/web.php dosyamızı açalım ve bu sayfaya use App\Http\Controllers\MerhabaController; MerhabaController’ımızı çağıralım. Ardından sayfa yönlendirmemizi yapalım.
1 2 3 4 |
use App\Http\Controllers\MerhabaController; Route::get('/selam',[MerhabaController::class,'selam']); |
Windows için cmd çalıştıralım, projemizin olduğu dizine gidelim ve terminale aşağıdaki komudu yazalım.
1 2 3 |
php artisan serve |
Tarayıcımızın adres çubuğuna http://localhost:8000/selam yazalım. Ekranda “Merhaba Laravel 8” metnini görüyorsanıp problem yok.
Hem get ile gönderdiğinizde hemde post ile gönderdiğinizde aynı controller metodu çalıştıracaksanız Route::match metodunu kullanabilirsinzi. Örneğin:
use App\Http\Controllers\MerhabaController; Route::match([‘get’,’post’],’/selam’,[MerhabaController::class,’selam’]);
İsterseniz Route::get,Route::post,Route::put,Route::delete,Route::patch,Route::options yönlendirmelerinde ise Route::any kullanabilirsiniz.
1 2 3 4 |
use App\Http\Controllers\MerhabaController; Route::any('/selam',[MerhabaController::class,'selam']); |
Post gönderimlerinizde ise projeniz/routes/web.php sayfasına use Illuminate\Http\Request; klasını dahil ederek post iseteklerinide alabilirsiniz.
Örnek bir get ve post işlemini yaptığımız bir sayfa yapalım öncelikle Route yapımızı routes/web.php aşağıdaki gibi düzenleyelim.
1 2 3 4 5 |
//bunları ekliyoruz. use App\Http\Controllers\MerhabaController; Route::match(['get','post'],'/selam',[MerhabaController::class,'selam']); |
Daha sonra projeniz/App/Http/Controllers/MerhabaController.php dosyamıza aşağıdaki metodu ekleyelim
1 2 3 4 5 |
public function selam(Request $gelenPost){ return view('selamla',['postVeri'=>$gelenPost]); } |
Son olarak bir tane projeniz/resources/views/ dizinine selamla.blade.php dosyamızı oluşturlave içerisini aşağıdaki gibi düzenleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Selamla</title> </head> <body> <?php if(isset($postVeri->email)){ printf("Mail : %s<br />Şifre : %s",$postVeri->email,$postVeri->sifre); } ?> <form action="/selam" method="POST"> @csrf <input type="email" name="email" placeholder="e-Posta" /><br /> <input type="password" name="sifre" placeholder="Şifre" /><br /> <button type="submit">Gönder</button> </form> </body> </html> |
Tarayıcımızın adresine http://localhost:8000/selam yazalım ve post edelim gelen verileri ekranda görüyorsanız problem yok.
Laravel 8 Redirect Kullanımı
Laravel 8 de Redirect metodu sayfa yönlendirmeleri için kullanılır örneğin /,/index,/anasayfa,/home şeklindeki sayfaları /selam<code>'a yönlendirelim.</p><p style="text-align:justify"><code>projeniz/routes/web.php’yi aşağıdaki gibi düzenleyelim
1 2 3 4 5 |
use App\Http\Controllers\MerhabaController; Route::redirect('/','/selam'); //anadizini /selam olarak yönlendirecek. Route::match(['get','post'],'/selam',[MerhabaController::class,'selam']); |
Laravel 8 View Routes Yönledirmesi
Eğer bir controller kullanmadan bir sayfa (x.blade.php) görütülemek istiyorsanı web.php’yi aşağıdaki gibi düzenleyebilirsiniz
Daha önce oluşturduğumuz selamla.blade.php sayfasına direk yönlendirme yapalım.
1 2 3 4 |
use App\Http\Controllers\MerhabaController; Route::view('/','selamla'); |
Eğer yönlendirem yaparken bir veride göndermek istiyorsanız web.php’yi aşağıdaki gibi düzenleyin.
1 2 3 4 |
use App\Http\Controllers\MerhabaController; Route::view('/','selamla',['gidenVeri'=>"Merhaba Laravel 8"]); |
selamla.blade.php’ye $gidenVeri="Merhaba Laravel 8"; gönderildi. selamla.blade.php de ise aşağıdaki gibi karşılayabilirsiniz.
1 2 3 4 |
//selamla.blade.php {{ $gidenVeri }} |
Laravel 8 Route Parametre Gönderimi
routes/web.php yönlendirme yaparken parametre gönderdimleride aşağıdaki gibi olmaktadır.
1 2 3 4 5 |
//routes/web.php use App\Http\Controllers\MerhabaController; Route::get('/kullanici/{id}',[MerhabaController::class,'setParam']); |
Gelen parametreleri ise controller sayfamızda aşağıdaki gibi alıyoruz
1 2 3 4 5 6 7 |
//MerhabaController public function setParam($userId){ return "Gelen Parametre : ".$userId; } |
Bu sefer birden çok parametre gönderelim.
1 2 3 4 5 |
//routes/web.php use App\Http\Controllers\MerhabaController; Route::get('/kullanici/{id}/name/{name}',[MerhabaController::class,'setParam']); |
MerhabaController’ımızda parametrelerimizi alalım.
1 2 3 4 5 6 7 |
//App/Http/Controllers/MerhabaController public function setParam($userId,$name){ return "Gelen Parametre id : ".$userId."<br />Gelen parametre name : ".$name; } |
Her zaman sayfamıza parametre gelmeyebilir bunun için varsayılanlar oluşturmamız gerekir
1 2 3 4 5 |
//routes/web.php use App\Http\Controllers\MerhabaController; Route::get('/kullanici/{id?}',[MerhabaController::class,'setParam']); |
Controllerimızıda düzenleyelim.
1 2 3 4 5 6 |
//MerhabaControler.php public function setParam($userId="id gönderilmedi."){ return "Gelen Parametre id : ".$userId; } |
Laravel 8 Parametre Kısıtlamaları
İsterseniz gelen parametere kısıtlamalar getirerek bir ön elemeden geçirip daha sağlıklı parametrelerin gelmesiniz sağlaya biliriz.
1 2 3 4 5 6 |
//routes/web.php use App\Http\Controllers\MerhabaController; Route::get('/kullanici/{adi?}',[MerhabaController::class,'setParam'])->where('adi','[A-Za-z]+'); //A'dan Z'ye büyük ve küçük harfler birden fazla girilecek şekilde çalışır. |
1 2 3 4 5 6 |
//MerhabaController public function setParam($userAdi){ return "Gelen Parametre adı : ".$userAdi; } |
Diğer örnek filitrelemeleri aşağıda görebilirsiniz.
1 2 3 4 5 6 7 8 9 10 |
use App\Http\Controllers\MerhabaController; Route::get('/kullanici/{adi}',[MerhabaController::class,'setParam'])->where('adi','[A-Za-z]+'); //A'dan Z'ye büyük küçük birden fazla harf. Route::get('/kullanici/{id}',[MerhabaController::class,'setParam'])->where('adi','[0-9]+'); //0'dan 9'a birden fazla sayı. Route::get('/kullanici/{adi}/{id}',[MerhabaController::class,'setParam'])->where(['id'=>'[0-9]+','adi'=>'[A-Za-z]+']); //Birden çok parametre kullanımında Route::get('/kullanici/{adi}/{id}',[MerhabaController::class,'setParam'])->whereAlpha('adi')->whereNumber('id'); //Daha kolay kullanımı Route::get('/kullanici/{key}',[MerhabaController::class,'setParam'])->whereAlphaNumber('key'); //hem numeric hem karakterleri kapsıyor. Route::get('/kullanici/{id}',[MerhabaController::class,'setParam'])->whereUuid('id'); Route::get('/kullanici/{data}',[MerhabaController::class,'setParam'])->where('.*'); //bütün karakterlere izin veriyoruz. |
Laravel 8 Url İsimlendirme
Laravel 8’de yönlendirmeleriniz isimlendirerek daha kısa ve pratik yönlendirmeler yapabilirsiniz.
1 2 3 4 5 6 7 8 |
//routes/web.php use App\Http\Controllers\MerhabaController; Route::get('/admin/kullanici/profil',[MerhabaController::class,'profil'])->name('profil'); Route::get('/url',function(){ return route('profil'); }); // ekran çıktısı : http://localhost:8000/admin/kullanici/profil |
İsimlendireceğiniz url’ler parametreli olduğunda ise aşağdaki gibi kullanılır.
1 2 3 4 5 6 7 |
//routes/web.php use App\Http\Controllers\MerhabaController; Route::get('/admin/kullanici/{id}',[MerhabaController::class,'profil'])->name('profil'); Route::get('/url',function(){ return route('profil',['id'=>2017]); }); //ekran çıktısı: http://localhost:8000/admin/kullanici/2017 |
Laravel 8 Önek Kullanımı
Belirli yönlendirmleri gruplayarak sürekli ön ekleri yazmak zorunda kalmaz ve yönlendirmelerinizde bir group halinde kalmış olur. Mesala admin panel yönlendirmleri aşağıdaki gibi gruplanabilir.
1 2 3 4 5 6 7 8 9 10 11 |
//routes/web.php Route::prefix('/admin/supersu/')->group(function(){ Route::get('/sliderEkle',function(){ return "/admin/supersu/sliderEkle"; }); Route::get('/sliderGuncelle',function(){ return "/admin/supersu/sliderGuncelle"; }); }); |
Laravel 8 Önekli Route Adlandırma
Gruplamış olduğunuz yönlendirleri aşağıdaki gibi adlandırabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
use App\Http\Controllers\MerhabaController; Route::prefix('/admin/supersu/')->group(function(){ Route::get('/sliderEkle',function(){ return "/admin/supersu/sliderEkle"; })->name('sInsert'); Route::get('/sliderGuncelle',function(){ return "/admin/supersu/sliderGuncelle"; })->name('sUpdate'); Route::get('/url',function(){ $x=route('sInsert'); $y=route('sUpdate'); return "ekle url : ". $x."<br/>Güncelle url : ".$y; }); }); /** * Url:http://localhost:8000/admin/supersu/url * Ekran Çıktısı: * ekle url : http://localhost:8000/admin/supersu/sliderEkle * Güncelle url : http://localhost:8000/admin/supersu/sliderGuncelle */ |
Daha detaylı bilgi için Laravel sayfasını ziyaret edebilirsiniz.