Laravel Route İşlemleri
Hepinize merhaba dostlarım :). Bu yazımda sizlere daha önceden başlamış olduğumuz laravel derslerinin bir konusu olan ve proje oluşturma işleminde çok önemli bir yere sahip olan konudan yani route sisteminden bahsedeceğim :). Route sistemi laravel üzerinde vazgeçilmez bir yere sahiptir. Çünkü gelen her istek get olsun post olsun veya patch olsun bizim belirttiğimiz istekler içerisinde çalıştırma işlemlerinde route yapısı çok büyük olanak sağlayacaktır :). Özellikle sektörde bir geliştiricinin projesinde 3000 adet route kullandığını bile görmüşlüğüm var :). Buradan da anlıyoruz ki laravel ile proje geliştirirken route işlemleri bizim için olmazsa olmaz :).O halde sözü daha fazla uzatmadan route işlemlerine girişimizi yapalım ama öncelikle laravel projemizi kuralım :) (laravel ortamını kurma ve çalıştırma hakkında takılan dostlarım buradan yazıma ulaşabilir)
Route Yapılarını İnceleyelim
Eveeeet artık laravel projemizi de oluşturduğumuza göre gelelim route yapılarına yavaş yavaş girişimizi yapalım :). Öncelikle dostlarım laravel üzerinde bir proje geliştirirken rotalarımızı yazacağımız dosya routes klasörü altındaki web.php dosyasıdır (rest api yazımı gerektirmeyen projelerde). Şimdi bu dosyayı açalım ve içerisini inceleyelim :)
<?php
Route::get('/', function () {
return view('welcome');
});
?>
şeklinde bir kod bulunacaktır :). Kodumuzda bir istek ve bu istek geldiğinde çalışacak olan fonksiyon bulunuyor (fonksiyon önemli aman unutmayın :)). Burada route dosyasındaki bu kodumuzun diyor ki: "Kardeşim sen projeyi çalıştırdığında ben sana bir ilk olarak sana bir view döndüreceğim :)" diyor :). Biz şu anlık laravelde daha yolun başlarında olduğumuz için view ile çalışmayalım ve oradan bir metin dönmesini isteyelim :). Bunu nasıl yaparız diye merak ediyorsanız bu kodu aşağıdaki gibi düzenleriz
<?php
Route::get('/', function () {
echo "MFSoftware Blog";
});
?>
şeklinde bir düzenlemeye geçirdik :). Uygulamamızı yenilediğimizde ekranımıza çıkacak sonuç
MFSoftware Blog
şeklinde bir çıktı olacaktır :). Şimdi gelelim ve route methodlarından kısaca bir bahsedelim ve daha sonra da örneklerimize kaldığımız yerden devam edelim :)
Method İsmi | Methodun Görevi |
Route::get() | Web browser sayfasında ur den gelen isteği almaya yarar |
Route::post() | Web browser sayfasında get() methodu her url den gelen isteği değil de form üzerinden veri gönderme işlemlerinde (methodu post olan formlarda) kullanılır ve uzun lafın kısası post ile gelen verileri alma işleminde kullanılır |
Route::match() | Web browser sayfasında bizim belirlediğimiz istekler (get,post vs veya birden fazla methodlar) içerisine yazılarak projenin işlemesinde yardımcı olur |
Route::patch() | Web browser sayfaslarında özellikle güncelleme yaptırma durumlarında bu method kullanılır |
Route::delete() | Web browser sayfalarında özellikle veri silme işlemleri yaptırma gerektiği durumlarda bu method kullanılır |
şeklinde kodlarımızı yazdık :). Şimdi gelelim yavaştan yavaştan örneklerimizi yapmaya başlayalım
Route Yapılarıyla İlgili Örnekler
Arık route methodları ile ilgili aklımızda soru kalmadığına göre dostlarım gelelim artık route işlemleri ile ilgili örnekler yapmaya :). Heyecanlandığınızı seziyorum ve bunun farkındayım :). Sözümü daha fazla uzatmadan hemen ilk örneğime geçiyorum
Örnek 1: Örnek olarak hakkımda sayfası oluşturalım ve "hakkimda" seçeneği get ile geldiğinde bize bir metin bastıralım :). Gelin hemen onu kodlayalım
<?php
Route::get('hakkimda',function (){
echo "Benim Hakkımda Sayfam";
});
?>
şeklinde kodumuzu yazalım :). Projemizi çalıştıralım ve aşağıdaki gibi istek attığımızda
http://127.0.0.1:8000/hakkimda
bize geri dönecek olan sonuç
Benim Hakkımda Sayfam
şeklinde olacaktır :).
Örnek 2: Bu örneğimizde ise "veriler" isimli bir rotamız olsun ama "post" methodu ile çalışsın. Gelelim hemen onu da kodlayalım
<?php
Route::post('veriler',function (){
echo "Verilerimiz Geldi";
});
?>
şeklinde kodumuzu yazdık :). Şimdi gelelim biz bu rotamızı url kısmına aşağıdaki gibi yazarsak
http://127.0.0.1:8000/veriler
şeklinde url den istek attığımızda bize gelecek olan sonuç
The GET method is not supported for this route. Supported methods: POST.
şeklinde oluyor :). Yani diyor ki "Kardeşim senin bu istek attığın rota post methodu ile çalışıyor :). Sen get ile istek atıyorsun bunu çalıştıramam :). Bunu çalıştırmam için bana post isteği at :)" şeklinde bir uyarı veriyor :). Peki biz bunu nasıl çalıştırırız diye aklımıza soru da gelmiyor değil :). Bunun için POSTMAN isimli uygulamayı indirip bilgisayarımıza ve aşağıdaki gibi bir istek atıyoruz ve sonuç çıktısı da yine aşağıdaki gibi bizim karşımıza geliyor :)
Resim 1: https://prnt.sc/112xpge
şeklinde ekranımıza bastırılıyor :). İşte http den atamadığımız post,delete,patch işlemlerini POSTMAN uygulaması aracılığıyla rahat bir şekilde ayarlayabiliyoruz :). Gelelim bir diğer örneğimize :)
Örnek 3: Bu örneğimizde de get ve post methodlarının her ikisiyle de çalışacak olan bir method yazalım. Buna "coklu" ismini verelim. Hemen kod kısmına gidip
<?php
Route::match(["get","post"],"coklu",function (){
echo "Çoklu Route Çalıştı :)";
});
?>
şeklinde kodumuzu yazdık :). Burada artık get ve post ile gönderilen "coklu" isteği rahat bir şekilde çalışacak ve ekranımıza başarılı bir şekilde çıktı verecektir :). Gelin hemen bunların deneyelim :). Web browser sayfasını açıp
http://127.0.0.1:8000/coklu
isteğini attığımızda ekranımıza çıktı olacak gelen sonuç
Çoklu Route Çalıştı :)
olacaktır :). Aynı şekilde bunu POST ile gönderecek olursak geleceğiz POSTMAN uygulamasına ve aşağıdaki gibi bir istek yapacağız
Resim 2: https://prnt.sc/112xzxu
şeklinde bize çıktı verilecektir dostlarım :). Bu örnek de sorunsuz bir şekilde anlaşıldığına göre gelelim diğer bir örneğe
Örnek 4: Bu örneğimizde özellikle veri güncelleme işlemlerinde kullanılan patch methoduyla çalışalım. Güncelleme işlemi için "guncelle" şeklinde bir isteğimiz olsun :). O halde gelelim hemen kodlarımızı yazmaya başlayalım
<?php
Route::patch("guncelle",function (){
echo "Veri Güncellenecek";
});
?>
şeklinde kodumuzu yazdık. Daha sonra web browser sayfamızı açalım ve
http://127.0.0.1:8000/guncelle
şeklinde isteğimizi yazdık. Bunu web browser da yazınca direkt bize hata verecektir. O hata ise şudur
The GET method is not supported for this route. Supported methods: PATCH.
burada ise bize çıkan hata şudur: "Bu route patch ile çalışırken sen get ile çalıştırmaya çalışıyorsun dostum :). Ben bu şekilde çalışamam aman dikkat :)" uyarısını veriyor. Biz de bunu POSTMAN uygulamasında rahatlıkla çalıştırabiliriz sonucu görmek için. Bunu da aşağıdaki resme bıraktım :)
Resim 3: https://prnt.sc/112yuyo
şeklinde görüldüğü gibi POSTMAN üzerinden rahatlıkla PATCH isteğini gönderip sonucu ekranımıza bastırdık :). Bu örneğimizi anladığımıza göre artık gelelim diğer bir örneğimize :)
Örnek 5: Bu örneğimizde ise silme işlemlerinin vazgeçilmez rotasıyla ilgili bir işlem yapalım. Burada ise "sil" isminde bir isteğimiz olsun ve bu isteği karşılayacak olan route komutuz "delete" methoduyla yakalasın. Gelin bunu da hızlı bir şekilde koda dökelim :)
<?php
Route::delete("sil",function (){
echo "Veri Silindi";
});
?>
şeklinde kodumuzu yazdık. Bunu web browserimize gelip url kısmına
http://127.0.0.1:8000/sil
kodunu yazarsak bize aşağıdaki gibi bir hata verir:
The GET method is not supported for this route. Supported methods: DELETE.
burada da diğer örneklerden de anlayacağınız üzere benzer bir hata vardır :). Hatada bize şu bildiriliyor: "Dostum sen DELETE methodu kullanarak bir rota oluşturdun ama bunu da GET isteği ile kullanmaya çalışıyorsun :). Aman dikkat et :)" uyarısı bize geliyor. Artık biz de rota dosyasını sürekli rahatsız etmeyelim hep GET isteği atıyoruz :). Şimdi gelelim ve bunu POSTMAN üzerinden deneyelim. Uygulamamızı açıp aşağıdaki şekildeki gibi istek attığımızda bize sonuç başarılı bir şekilde dönecektir
Resim 4: https://prnt.sc/1130kb8
şeklinde ekranımıza başarılı bir şekilde çıktı bastırıldı dostlarım :). Şimdi bu örneklerimizi yaptığımıza göre artık gelelim route kullanımında en güzel ve en sık kullanılan kısma :)
Route Parametre Gönderimi
Eveeeet artık route kısmının vazgeçilmez konusundan birisindeyiz :). Route parametrelerini kısaca tanımlayacak olursak dostlarım hemen hemen her projede kullanılan, güncelleme, silme ve görüntüleme işlemlerinde gelen parametreye göre veri tabanı işlemleri yapmamızda çok büyük fayda sağlar. Örnek vermek gerekirse biz 3 id li bir örneği silmek istiyoruz varsayalım. Bu 3 id sini route üzerinden gönderip veri tabanında sorgulayıp sildiririz temel olarak bu şekilde işlem yaptırırız :). Akıllarda şu soru yer edindiğini seziyorum:
Peki iyi hoş da hocam bunu route üzerinde nasıl kullanabiliriz ?
Çözüm çok basit dostlarım :). Gelelim bir örnek route komutu oluşturalım
<?php
Route::get("{parametre}",function ($parametre){
echo $id;
});
?>
şeklinde komutumuzu yazdık :). Dikkat etmişseniz dostlarım gelen parametreyi fonksiyon içerisinde yakalayıp daha sonra da bunu ekrana bastırma işlemini gerçekleştirmesini söyledik. Örnek olarak "mfsoftware" isimli bir parametre atalım :). Gelelim web browserimizde url kısmına ve
http://127.0.0.1:8000/mfsoftware
şeklinde bir istek yapalım. Bize geri dönecek olan sonuç aşağıdaki gibi olacaktır
mfsoftware
şeklinde bir ekran çıktısı bizi karşılayacaktır :). Şimdi yukarıda demiştim ya bu parametreyi fonksiyon içerisinden yakalıyoruz diye :). Yakalamadan yazarsak kodu ve çalıştırdığımızda ne olur diye merak ediyorsanız gelin size sonucu göstereyim :). Kodumuzda aşağıdaki gibi ufak bir değişiklik yapalım
<?php
Route::get("{parametre}",function (){
});
?>
şeklinde kodumuzu yazdık :). Şimdi gelelim yukarıdaki isteğin aynısını browser a yaptığımızda bize gelecek olan sonuç:
şeklindedir :). Çünkü parametre gönderdik ama hiçbir şekilde yakalayamadık :). İşte fonksiyon içerisinde parametreyi yakalamamız bu derece önemli :)
Şimdi size bir şey daha göstereceğim :). Parametre atmazsak bizi nasıl bir sonuç bekliyor diye merak ettiğinizi biliyorum :). Bunu gelin size göstereyim atmazsak ne oluyor nasıl bir sonuç bizi karşılıyor :). Web browserimize gelip
http://127.0.0.1:8000/
şeklinde bir istekte bulunduğumuzda ve hiçbir parametre göndermediğimizde bizim karşımıza çıkacak olan sonuç aşağıdaki şekildeki gibidir :)
Resim 5: https://prnt.sc/113131f
şeklindedir. Yani herhangi bir parametre bulamadı ve bize direkt olarak "404 | Not Found" uyarısını verdi :). Peki biz şimdi bunu kullanıcıdan zorunlu olarak parametre girmesini istemeyeceğimiz durumlar olabilir :). Bunun önüne nasıl geçebiliriz diye soruyorsanız kod kısmına gelip
<?php
Route::get("{parametre?}",function ($parametre=null){
echo $parametre;
});
?>
şeklinde kodumuzu düzenlememiz lazımdır dostlarım :). Şimdi bizim burada yaptığımız işlemlerden birisi "{parametre?}" diyerek bu parametrenin zorunlu olmadığını belirttik, daha sonra da "$parametre = null" yazarak bu parametre gelmediğinde default olarak null değerini al dedik :). Bu kısmı da yaptığımıza göre artık gelelim bu kodu çalıştırmaya :). Web browser sayfamızı açalım ve
http://127.0.0.1:8000/
şeklinde bir istekte bulunduğumuzda ekranımıza artık "404 | Not Found" ekranı yerine
şeklinde bir boş sayfa gelecektir :). Artık her şey tamam olduğuna göre gelelim yaş hesaplayıcı bir route yazalım :).
Bir parametre alalım bu doğum tarihimiz olsun. Bu yıldan doğum tarihimizi çıkartarak yaşımızı ekrana bastıralım :). Hemen kodumuzu açalım ve
<?php
Route::get("yas/{dy?}",function ($dy=null){
if ($dy==null){
echo "Lütfen Doğum Yılınızı Giriniz";
}else{
echo "Yaşınız: ".intval(date("Y")-$dy);
}
});
?>
şeklinde kodumuzu yazalım. Daha sonra web browser sayfamızı açalım ve
http://127.0.0.1:8000/yas/
şeklinde bir istek atalım :). Bize geri dönecek olan sonuç
Lütfen Doğum Yılınızı Giriniz
şeklinde ekranımıza bir uyarı verdirdik :). Şimdi ben kendi doğum yılımı yazacağım yani aşağıdaki şekildeki gibi
http://127.0.0.1:8000/yas/1999
istek gönderirsem bana dönecek olan sonuç
Yaşınız: 22
şeklinde ekranımıza basılacaktır :).
Eveeet dostlarım :). Bu yazımda sizlere laravel framework'ü üzerinde route yapıları nedir, nasıl kullanılır dilim döndüğünce anlatmaya çalıştım :). Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmışsam benimle iletişime geçmekten çekinmeyin :). Konu başlarda biraz karmaşık ve zor gelebilir anlıyorum ben de laravele ilk geçişte bu konuda baya zorlanmıştım. Bu durumda sizlerden yapmanızı istediğim şey her yazımda da dediğiim gibi "İstikrarlı ve Azimli olmalı, bolca pratik yapmalısınız :)". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizin için kaçınılmaz olacaktır :)
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim :)
Yazar Hakkında
Kendi Halinde Bir Backend Developer