Laravel Route Name Kullanımı

Laravel Route Name Kullanımı

Hepinize merhaba dostlarım 😊. Bu yazımda sizlere Laravel ile proje geliştiricilerinin oluşturdukları route yapılarını kullanmasında çok ama çok yardımcı olan, karmaşıklığı önleyen, yani geliştiriciye uzun uzun kod url kodu yazdırmayan ve açıkça söylemek gerekirse Laravel in nimetlerinden birisi olan Route Name işlemini yani oluşturduğumuz route kodlarına isim takma işleminden bahsedeceğim. Şimdi sizin aklınızda bir soru var ve ben bunu seziyorum

Hocam Allah razı olsun güzel bir açıklama yaptınız da bunu örnek yapmadan önce yani konuya tam giriş yapmadan önce biraz açıklama şansınız var mı ?

Cevabım "Elbette 😊" olacaktır. Örnek vermemiz gerekirse bir route tanımladınız. Route nin gideceği adres de "/admin/users/create" olsun. Zaman gelecek mesela buradaki "admin, users, create" yollarını düzenleyeceğiniz zamanlar olabilecek 😊. Özellikle bu projeyi müşterinize yapıyorsanız ve müşteri de "Bunları Türkçe yapabilir miyiz ?" diye sorduğunda ve biz de bu oluşturduğumuz route kısımlarına name vermemişsek tamam artık işler çok ama çok karmaşıklaşıyor (kendimden örnek vermem gerekirse laravel ile ilk defa proje geliştirirken name vermediğim için bayağı zorlanmıştım 😊). İşte dostlarım bu ve bunun gibi hatalarla karşılaşmamak için route name yapısını kullanırız. Kullanımı çok zor değil çok karışık da değil 😊. Ekstra olarak birkaç terim vardır bunları kavrayacağınıza inanıyorum 😊. Önceki route konularını okumayan dostlarım için link bırakıyorum hemen

  1. Route İşlemleri: https://mfsoftware.net/yazi/laravel-route-islemleri
  2. Controller İşlemleri: https://mfsoftware.net/yazi/laravel-controller-islemleri (Route Kullanımı İçeriyor 😊 Okumanızda fayda var)

şeklinde linkleri bıraktım dostlarım 😊. Şimdi artık konumuza yavaş yavaş geçişimizi yapalım dostlarım 😊. Öncelikle laravel proje ortamımızı hazırlayalım (bu noktada takılan dostlarım buradan faydalanabilir 😊)

Laravel proje ortamını kurduğumuza göre gelelim ve "app/Http/Controllers" içerisine "Back" klasörü açalım. Bunun içerisine de artisan komutuyla HomeController oluşturalım. Bunu oluşturduktan sonra HomeController dosyamızı açalım ve

<?php

namespace App\Http\Controllers\Back;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index(){
        echo "Burası Admin Sayfası<br><br>br";
        echo "<a>Haberler Kısmı</a><br>";
        echo "<a>Aboneler Kısmı</a><br>";
        echo "<a>Ziyaretçi Sayfasına Git</a>";
    }

    public function news(){
        echo "Burası Admin kısmının haber görüntüleme sayfası";
    }

    public function subscribes(){
        echo "Burası aboneleri görüntüleme sayfası";
    }
}

 şeklinde düzenlememizi yapalım. Bu kodları artık biliyorsunuzdur önceki laravel yazılarımı okumuşsanız bu methodların her birinin aslında birer sayfa olduğunu düşünmüşsünüzdür 😊. Bu kısma kadar tamam isek şimdi gelelim routes/web.php dosyamıza 😊. Orayı açıp hemen

<?php

use Illuminate\Support\Facades\Route;

/** ADMIN ROUTE KISMI **/
Route::group(['prefix'=>'admin','namespace'=>'Back'],function (){
    Route::get('','HomeController@index');
    Route::get('news','HomeController@news');
    Route::get('subscribes','HomeController@subscribes');
});

şeklinde kodlarımızı yazdık. 3 adet sayfamızı da tanımladık. Kod kısmında dikkat etmişseniz iki adet yapancı bir terim var 😊 Bunlardan birisi Prefix, diğeri ise Namespace. Aklınıza şu soru gelebilir

Hocam bunları ilk duyuyoruz biraz karmaşık geldi bize 😊. Biraz değinir misiniz ?

Tabii ki değinirim dostlarım 😊. Hemen bunları maddeler halinde açıklayayım

  1. Prefix: Prefix bizim route group oluşturduğumuzda ön tanımlayıcımız olarak geçer dostlarım 😊. Kodda dikkat etmişseniz news sayfasına gidileceğinde ön ek tanımlayıcısı olarak /admin/news olarak belirtilmesi gerekir 😊.
  2. Namespace: Namespace kısmı ise bizim route içerisine yazdığımız controller dosyamızın aslında hangi klasör altından çağrılacağını belirtir. app/Http/Controllers altında herhangi bir klasör oluşturup içerisine bir Controller oluşturmuşsak bu içerisinde olduğu klasörün adını vermemiz gerekir, ha yok direkt olarak app/Http/Controllers içerisine atadıysak herhangi bir namespace ayarı yapmamıza gerek yoktur 😊

 Şimdiiiii bu kısma kadar tamamız 😊. Gelin bir de ziyaretçi kısmı için controller oluşturalım 😊. Bunun için ise app/Http/Controllers klasörü altında Front klasörü oluşturalım ve bunların içine de HomeController dosyamızı artisan ile oluşturalım 😊. Dosyamızı oluşturduktan sonra hemen bunu da ayarlayalım.

<?php

namespace App\Http\Controllers\Front;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index(){
        echo "Burası Index Sayfamız<br><br><br>";
        echo "<a>Haberler Kısmı</a><br>";
        echo "<a>Hakkımda Kısmı</a><br>";
        echo "<a>İletişim Kısmı</a><br><br><br>";
        echo "<a>Admin Sayfasına Git</a>";
    }

    public function news(){
        echo "Haberler Kısmı";
    }

    public function about(){
        echo "Hakkımızda Kısmı";
    }

    public function contact(){
        echo "İletişim Kısmı";
    }

}

şeklinde Front klasörümüzün altında HomeController dosyamızı oluşturup içerisini düzenledik. Şimdi ise gelelim web.php dosyamızı açalım. İçerisine de aşağıdaki gibi kodlarımızı yazalım

<?php

use Illuminate\Support\Facades\Route;

/** FRONT ROUTE KISMI **/
Route::group(['prefix'=>'/','namespace'=>'Front'],function (){
    Route::get('','HomeController@index');
    Route::get('news','HomeController@news');
    Route::get('about','HomeController@about');
    Route::get('contact','HomeController@contact');
});

/** ADMIN ROUTE KISMI **/
Route::group(['prefix'=>'admin','namespace'=>'Back'],function (){
    Route::get('','HomeController@index');
    Route::get('news','HomeController@news');
    Route::get('subscribes','HomeController@subscribes');
});

şeklinde route kodlarımızı yazdık 😊. Fark ettiyseniz bu kısma kadar hiçbir name tanımlaması yapmadık veya kapsayıcı bir ön ek (name işlemi için) oluşturmadık 😊. Şimdi gelelim işlemimizin asıl zor tarafına 😊. Burada herhangi bir name tanımlamadık ya bu işlem işte şu şekilde olacak. Gelelim öncelikle Front/HomeController dosyamıza ve index methodumuzun altında aşağıdaki gibi değişiklikler yapalım

public function index(){
        echo "Burası Index Sayfamız<br><br><br>";
        echo "<a href='/news'>Haberler Kısmı</a><br>";
        echo "<a href='/about'>Hakkımda Kısmı</a><br>";
        echo "<a href='/contact'>İletişim Kısmı</a><br><br><br>";
        echo "<a href='/admin'>Admin Sayfasına Git</a>";
 }

şeklinde hiçbir name tanımlama işlemi gerçekleştirmeden bunları aynı pure php de olduğu gibi uzun uzadıya yazdık 😊. Şimdi gelelim işin korkunç tarafına. Burada mesela /about yerine /abotu yazarsak ve tıklarsak karşımıza

 

şeklinde uyarı çıkacaktır. Böyle bir yolun olmadığını bize belirtecektir buraya kadar doğru 😊. Şimdi gelelim asıl olaya. Siz mesela route kısmından bu gidecek olan url yi değiştirdiniz ya da bizim şu anki yaptığımız gibi link kısmının href ayarından değiştirdiniz diyelim. 1 yerden değiştirdiğinizde name kullanmadığınız için diğer yerlerden de değiştireceksiniz. Bunu 100 yerde kullandığımızı düşünsenize 😅. Yandık ki ne yandık diye söylenip dururuz 😊. İşte bunun önüne geçmemiz için dostlarım route işlemlerinde name işlemini kullanırız 😊. Gelin hep beraber routes klasörümüzün altında web.php dosyamızı açalım ve

<?php

use Illuminate\Support\Facades\Route;

/** FRONT ROUTE KISMI **/
Route::group(['prefix'=>'/','namespace'=>'Front'],function (){
    Route::get('','HomeController@index')->name('front.index');
    Route::get('news','HomeController@news')->name('front.news');
    Route::get('about','HomeController@about')->name('front.about');
    Route::get('contact','HomeController@contact')->name('front.contact');
});

/** ADMIN ROUTE KISMI **/
Route::group(['prefix'=>'admin','namespace'=>'Back'],function (){
    Route::get('','HomeController@index')->name('back.index');
    Route::get('news','HomeController@news')->name('back.news');
    Route::get('subscribes','HomeController@subscribes')->name('back.subscribes');
});

şeklinde kodlarımızı yazdık. Baya bir pratik kullanım olduğunu anlamışsınızdır 😊. Ama buradan komutumuzun ne olarak kullandığımızda zorlanan dostlarım için bunları bir tablo yaparak anlatayım

Route İsmi Route İsminin Anlamı
front.index Ön paneldeki HomeController içerisinde index methodunu çalıştırır
front.news Ön paneldeki  HomeController içerisindeki news methodunu çalıştırır
front.about Ön paneldeki HomeController içerisindeki about methodunu çalıştırır
front.contact Ön paneldeki HomeController içerisindeki contact methodunu çalıştırır
back.index Admin paneldeki HomeController içerisindeki index methodunu çalıştırır
back.news Admin paneldeki HomeController içerisindeki news methodunu çalıştırır
back.subscribes Admin paneldeki HomeController içerisindeki subscribes methodunu çalıştırır

şeklinde name tanımlamalarını projemize tanımladık dostlarım 😊. Şimdi gelelim bu route name işlemlerini controller kısımlarında tanımladığımız href komutları içerisine tanımlayalım 😊. Gelelim öncelikle Front/HomeController içerisindeki index methodumuza gelelim ve

<?php

    public function index(){
        echo "Burası Index Sayfamız<br><br><br>";
        echo "<a href=".route('front.news').">Haberler Kısmı</a><br>";
        echo "<a href=".route('front.about').">Hakkımda Kısmı</a><br>";
        echo "<a href=".route('front.contact').">İletişim Kısmı</a><br><br><br>";
        echo "<a href=".route('back.index').">Admin Sayfasına Git</a>";
    }

?>

şeklinde kodlarımızı ayarladık dostlarım 😊. Gördüğünüz üzere çok zor bir yanı yok. Şimdi ise gelelim Back/HomeController dosyamız altındaki index methodumuza gelelim ve aşağıdaki gibi düzenleme yapalım

<?php
 public function index(){
        echo "Burası Admin Sayfası<br><br><br>";
        echo "<a href=".route('back.news').">Haberler Kısmı</a><br>";
        echo "<a href=".route('back.subscribes').">Aboneler Kısmı</a><br>";
        echo "<a href=".route('front.index').">Ziyaretçi Sayfasına Git</a>";
    }
?>

şeklinde kodlarımızı yazdık dostlarım 😊. Artık route kısmındaki tanımladığımız prefix ler (yani /admin /news gibi) değişse bile bizim harici olarak href kısımlarında bir düzenleme yapmamıza hiç gerek kalmayacaktır, 404 hatasına düşmeyecektir. Şimdi sizin aklınızda bir soru var ve ben bunu route name kısmında sezdim 😊. Soru ise şu

Hocam Allah razı olsun çok güzel anlattınız lakin route name kısmında hepsinin başına mesela front kısmı için front.index, front.contact diye başına front tanımladık. Admin kısmında ise aynı şekilde admin.index, admin.news şeklinde tanımlamalar yaptık. Her bir route tanımladığımızda uzun uzun böyle mi yazcaz yok mu bu admin veya route ekini bizim için otomatik oluşturan 😉

Çok güzel bir düşünce dostlarım 😊. Ben de route name kısımlarıyla ilk kez uğraşırken bu soru aklımı çok kurcalamıştı 😊. Ve bu aklımı kurcalayan soru sizin aklınızı kurcalasın istemiyorum ve cevabı yapıştırıyorum "Tabii ki bunun bir kolay yolu var 😊. Laravel kolaylıklardan ibaret" diyorum ve hemen kodları düzenleme işlemine başlıyorum. Yalnız bu noktada acaba nasıl diye gözünüzü sakın ama sakın korkutmayın 😊. Çözümü oldukça basit olan bu yapı size büyük projeler ile uğraşırken çok ama çok yardımcı olacaktır 😊. Gelelim o halde sözü daha fazla uzatmadan kodlarımızı yazalım. routes/web.php dosyasına ilerleyelim ve

<?php

use Illuminate\Support\Facades\Route;

/** FRONT ROUTE KISMI **/
Route::group(['prefix'=>'/','namespace'=>'Front','as'=>'front.'],function (){
    Route::get('','HomeController@index')->name('index');
    Route::get('news','HomeController@news')->name('news');
    Route::get('about','HomeController@about')->name('about');
    Route::get('contact','HomeController@contact')->name('contact');
});

/** ADMIN ROUTE KISMI **/
Route::group(['prefix'=>'admin','namespace'=>'Back','as'=>'back.'],function (){
    Route::get('','HomeController@index')->name('index');
    Route::get('news','HomeController@news')->name('news');
    Route::get('subscribes','HomeController@subscribes')->name('subscribes');
});

şeklinde kodlarımızı yazıyoruz dostlarım 😊. Bu as komutu bizim uzun uzun front. veya back. yazmamızı engelliyor 😊. Şimdi aklınızdan birinci olarak şaşkınlık ikinci olarak da bir soru geçiyordur 😊

Aaaa bu kadar basit miydi hocam 😊. Dediğiniz gibi çok zorlayıcı yanı yokmuş. Bunu yazdıktan sonra şu anki href kısımlarımızda bir ayarlama yapmamıza gerek var mı ?

diye aklınızdan geçenleri seziyorum 😊. Hemen cevap veriyorum "Name kullandığımız için ekstra bir ayar kullanmamıza hiç gerek kalmayacak 😊". Kodlarımızı çalıştırdığımızda ise sorunsuz bir şekilde çalışacaktır 😊💯

Route Name ile Parametre Gönderimi

 

Ve geldik dostlarım route işlemlerinde kullandığımız name işlemlerinden sonra artık projemizin gerektirdiği bazı zamanlar olacak. Nedir bu durumlar diye soracak olursanız size anlatayım. Örneğin bir veri güncelleme işlemi için id gönderme işlemimiz olabilir veya veri silme işlemi de olabilir. İşte bu durumlarda bizim bunu sağlıklı bir şekilde anlamamız ve bunu projemizde uygulamamız olabiliyor 😊. Şimdi sizin aklınızda şu soru var

Hocam peki bu işlem için ekstra bir şey yazmamıza gerek var mı mesela name kısmında 'as' komutunu yazdık ya bunda ekstra bir işlem var mı ?

şeklinde soru aklınızı kurcalıyordur ki bende de oldu bu 😊. Çözüm çok basit dostlarım lakin iki adet kısım var burada 😊. Tek veri gönderirken bir değişken şeklinde gönderirken birden fazla parametre gönderme işleminde dizi olarak gönderme işlemi yapmamız gerekiyor 😊. Biraz bu kısım karmaşık gelmiş olabilir anlıyorum ve hemen bir örnekle bunu göstermek istiyorum 😊.

Öncelikle dostlarım app/Http/Controllers klasörü altında Params şeklinde bir klasör oluşturalım ve bunun içerisinde de bir HomeController dosyası oluşturalım. Daha sonra ise içerisine aşağıdaki gibi kodlarımızı yazalım

<?php

namespace App\Http\Controllers\Params;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index(){
        echo "Burası Parametre gönderme sayfası<br><br><br>";
        echo "<a href=".route('parametre.tek','mfsoftware').">Tek Parametre Gönder</a><br>";   // tek parametre gönderme durumu için direkt virgül ile ayırıyoruz
        echo "<a href=".route('parametre.cok',['mfsoftware','blog']).">Çok Parametre Gönder</a><br>";   // yukarıda da anlattığım gibi çok parametre göndermek için virgül ile ayırıp dizi kullanmamız şart
    }

    public function tek_parametre($param1=null){
        echo "1. Parametre: ".$param1."<br><br>";
        echo "<a href=".route('parametre.index').">Index Sayfasına Git</a>";
    }

    public function cok_parametre($param1=null,$param2=null){
        echo "1. Parametre: ".$param1." 2. Parametre: ".$param2."<br><br>";
        echo "<a href=".route('parametre.index').">Index Sayfasına Git</a>";
    }
}

şeklinde kodlarımızı yazdık dostlarım 😊. Şimdi bu kodlarımızı yazdığımıza göre gelelim artık routes klasörümüzün altındaki web.php dosyamıza 😊. Burada da aşağıdaki kodlarımızı yazalım

/** PARAMETRE ROUTE KISMI **/
Route::group(['prefix'=>'parametre','namespace'=>'Params','as'=>'parametre.'],function (){
    Route::get('','HomeController@index')->name('index');
    Route::get('tek-parametre/{param1?}','HomeController@tek_parametre')->name('tek');
    Route::get('cok-parametre/{param1?}/{param2?}','HomeController@cok_parametre')->name('cok');
});

şeklinde kodlarımızı yazdık 😊. Bu yapıya artık gözünüz aşina olmuştur dostlarım 😊. Buradan Params/HomeController.php içerisindeki methodlara gidilecek olan yolları yazmış bulunmaktayız 😊. Bu kodlarımızı da yazdıktan sonra dostlarım projemizin kök dizinine gelip terminalimizden

php artisan serve

komutunu yazarak local serverimizi başlatalım 😊. Sonrasında ise browser kısmımıza gelip

http://127.0.0.1:8000/parametre

isteğimizi yazıp enter tuşuna basalım ve oluşturduğumuz Params/HomeController içerisindeki index methodumuza ilerleyelim 😊. Karşımıza aşağıdaki gibi bir görünüm  çıkacaktır 😊

şeklinde görünümümüzü görmüş bulunmaktayız 😊. Tek Parametre Gönder butonumuza bastığımızda

şeklinde ekran çıktısı gelecektir. Eğer biz Tek Parametre Gönder tuşuna değil de Çok Parametre Gönder tuşuna basmış olsaydık

şeklinde bir çıktı karşımıza gelecekti ki bastık artık karşımızda 😁. Index Sayfasına Git tuşuna basarsak da ekranımıza gelecek olan çıktı

şeklinde olacaktır 😊. Kodlarımız sorunsuz şekilde çalışıyor 💯

 

Eveeeet dostlarım 😊. Bu yazımda sizlere Laravel Framework üzerinde route oluştururken bunlara nasıl isim koyarız, nasıl çağırabiliriz, nasıl parametre göndeririz ve bize nasıl fayda sağlar gibi konuları elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bilgi aktarımı yapmışsam benimle iletişime geçmekten çekinmeyin 😊. Başlarda bu konu ufak ufak zorlayabilir anlıyorum 😊. Bu aşamada sizlerden isteğim her yazımda da dediğim gibi "İstikrarlı ve Azimli Olmanız, Bolca Pratik Yapmanızdır 😊". 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 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıNode.js MongoDB Veri Listeleme İşlemi
Sonraki YazıJavascript JSON Kullanımı
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz