Başlarken;
Laravel Framework’ün dosya ve dizinlerini incelemiştik. Eğer hâlâ bu dosya ve dizinleri bilmiyorsanız ” Laravel Rehberi – Temel Dosya ve Dizin Yapısı “ makalemi inceleyebilirsiniz.
“web.php” dosyasını hatırlayalım. Bu dosya “app/routes/web.php” dizininde bulunuyordu. Temel olarak rotalama işlemini yapıtığını söyleyip geçmiştik. Peki ya nasıl yapıyor? Biz kendimiz rota tanımlamalarını nasıl yapacağız? Bu makalede Laravel Framework üzerinde “web.php” üzerinde Rotalar tanımlamaya odaklanacağız. Bu makalenin amacı Laravel Framework yardımıyla “Temel Router” kavramını öğretmek ve kullanmaktır. Bu makale size yeterli gelmediyse yakın zamanda yayınlayacağım “Laravel Rehberi – Rota Sistemi (İleri Seviye)” başlığını inceleyebilirsiniz.
Temel Gereksinimler;
- PHP OOP (Nesnesel Porgramlama)
- Çalışan bir Laravel Projesi – Laravel Rehberi – Giriş Konusunu İnceleyebilirsiniz…
- Laravel Framework üzerindeki Dosya ve Dizin Yapısı – Laravel Rehberi – Temel Dosya ve Dizin Yapısı Konusunu İnceleyebilirsiniz…
İzlenecek Yol Haritası;
- Router Nedir?
- Yeni bir Rota nasıl oluşturulur?
- Oluşturulan Rotalar nasıl görüntülenir?
Router Nedir?
” MVC 5N1K? “ makalesinde temel olarak Router kavramına değinmiştik. Burada da üzerinden kısaca bir geçelim.
- Router: İstemcinin gönderdiği adreslerin gerekli Controller ve Action yönlendirilmesi bu katmanda yapılır.
Yeni Bir Rota Nasıl Oluşturulur?
Hatırlayalım. Bize gerekli olan “web.php” dosyamız vardı ve dosya yolu “app/routes/web.php” üzerinde bulunuyordu. Rotaları bu dosya üzerinde tanımlayacağız. Laravel Framework projesini ilk oluşturduğumuzda “web.php” dosyası içeriği aşağıdali gibidir;
Route::get('/', function () {
return view('welcome');
});
Başlangıçta sorulacak soru “Burada neler oluyor?”. İrdelemeye başlayalım. “::” kullanımından anlıyoruz ki bir sınıfın “static” fonksiyonu çağırılıyor. Çağırılan sınıfın “Route”, çağırılan static metodun ise “get()” olduğunu görmemiz gerek. Peki ya “get()” methodunun kullanımı nasıl olacak?
Route::get('olusturulacak_rota', function(){"yapilacak_islemler"});
Örneğin => Route::get('/merhaba', function(){echo "HelloWorld"!});
Temel olarak “get()” methodunun kullanımı bu şekilde yapılabilir. Bir eksik var, “Controller nerede?”. Yazılan “function” şu an için bir controller görevi görüyor. Ama biz oluşturduğumuz herhangi bir controller’a yönlendirmeyi nasıl sağlayacağız?
Route::get('olusturulacak_rota', 'controller_adi@action_adi');
Örneğin => Route::get('/merhaba', 'HomeController@SelamVer');
“controller_adi@action_adi” nasıl çalışıyor? Oluşturuğunuz bir controller düşünün adı “YeniControlller” olsun. Bu controller altında oluşturulan methodlara biliyoruz ki MVC yapısında “Action” diyoruz. Bir de “SelamVer()” methodumuz olsun. Yani “Action”. Laravel Framework’de rota tanımlarken bu methoda şu şekilde erişeceğiz “YeniController@SelamVer”
Route sınıfında “get()” methodunun haricinde methodlarımız bulunuyor. Bunlar;
Route::get($url, $callback);
-> İstek yöntemi "GET" olarak kullanıldığında çalışır rotalar oluşturur.
Route::post($url, $callback);
-> İstek yöntemi "POST" olarak kullanıldığında çalışır rotalar oluşturur.
Route::put($url, $callback);
-> İstek yöntemi yine "POST" olur. Fakat ek bir "method" input'u ile "PUT" isteği yönlendirilir.
Route::delete($url, $callback);
-> İstek yöntemi yine "POST" olur. Fakat ek bir "method" input'u ile "DELETE" isteği yönlendirilir.
Laravel Framework’de kullanılan mantık olarak “get()” sayfanın gezinme taleplerini karşılamak amacıyla kullanılır. “post()” yeni eklenecek veri için gönderilen form verilerinin taleplerini karşılamak amacıyla kullanılır. “put()” varolan verilerin güncellenmesi için gönderilen form verilerinin taleplerini karşılamak amacıyla kullanılır. “delete()” varolan verilerin silinmesi için gönderilen form verilerinin taleplerini karşılamak amacıyla kullanılır.
Örneğin bir kategoriniz var ve her kategorinizin bir id değeri bulunuyor. URL adresinizin “/kategoriler/1” şeklinde olmasını istiyorsunuz. “web.php” üzerinde şu tanımlamanın yapılması gerekir.
//Bu tanımlama için elinizde bir "KategoriController" ve içerisinde "Goster($id)" methodu gereklidir.
Route::get('/kategoriler/{id}', 'KategoriController@Goster');
“Hmmmm…”. İşleyiş şu şekilde oluyor. “/kategoriler/1” adresine erişmek istediğinizde “KategoriController@Goster” methoduna ulaşıyoruz. Bilmemiz gereken “Goster” methodu içerisine “$id” parametresini almalıdır.
class KategoriController extends Controller
{
public function Goster($id){
echo $id;
}
}
Bir şeyler zorlanıyor gibi. Rotalar’ın fazlalaştığını düşünün ve her URL adresini ezberlemek durumunda kalacaksınız. Bu rotalara isim versek nasıl olur?
Route::get('/kategoriler/{id}', 'KategoriController@Goster')->name('kategori_goster');
Biraz daha bir şeyler toparlandı gibi gibi. Sorular şu yönde olabilir. “Kategori için birden fazla rota tanımlaması yapabilir miyim?”. Haklısınız her seferinde “kategori/ekle”, “kategori/sil” yazmak hem okunabilirlik hem de rotalama için uygun olmayabilir. “prefix()” ve “group()” methodlarını kullanarak şu yapıyı elde edebilirsiniz.
Route::prefix("kategori")->group(function (){
Route::get("goster/{id}", "KategoriController@Goster")->name("kategori_goster");
Route::post("ekle", "KategoriController@Ekle")->name("kategori_ekle");
Route::put("guncelle", "KategoriController@Guncelle")->name("kategori_guncelle");
Route::delete("sil", "KategoriController@Sil")->name("kategori_sil");
});
Bu makale umuyorum ki “Temel Seviye” için yeterli bir anlatım olmuştur. Daha ayrıntılı bir rota sistemini makaleleştirmem için öncelikle Controller oluşturmayı ve methodlar yazmayı öğrenmemiz gerekiyor.
Oluşturulan Rotaları Görüntülemek;
Rota yapınız büyüdükçe büyüdü diyelim ve kodlar üzerinde görmek zorlaşabilir. Bu sebeple Laravel Framework bize aşağıdaki komutu sunuyor.
php artisan route:list
Bu komut CMD veya PowerShell üzerinde çalışacağını unutmayın. “Windows Tuşu + R” ile çalıştır penceresinden “cmd” yazarak konsolu çalıştırabilirsiniz. Projenizin kök dizinine erişiminizi “cd C:\wamp64\www” komutu ile sağlayabilirsiniz. Ardıncan “php artisan route:list” komutunu çalıştırın. Çıktınız şu şekilde olacak;
Rehber Kaynakları;
Umarım ki “Laravel Rehberi – Rota Sistemi (Temel Seviye)” makalesi hoşunuza gitmiştir. Keyifli ve Bol Bug’lu Günler Dilerim 🙂
Yasin Erarslan