Laravel 5 Framework Rotalarda Parametreler

Merhaba arkadaşlar bu yazıda rotalarda parametre tanımlamayı göreceğiz. Bazı durumlarda çalışan link üzerinden bazı parçaları almamız gerekiyor. Örneğin link üzerinden kullanıcının ID değerini almak istiyoruz. Bunun için aşağıdaki gibi bir tanımlama yapabiliriz.

Route::get('/user/{id}', function ($id) {
    echo $id;
});

Örnek çıktı:

Eğer isterseniz birden fazla parametre ekleyebilirsiniz. Parametreleri süslü parantezler ile belirtiyoruz. İsimler çok önemli değil fonksiyon üzerinde parametre sıraları önemlidir.

Route::get('/yazi/{id}/{sef}', function ($ilk,$ikinci) {
    echo $ilk . " - " . $ikinci;
});

Örnek çıktı:

İsteğe Bağlı Parametreler

Parametrenin mecburi olmadığı durumlarda süslü parantezlerin arasında ? koyuyoruz. Fonksiyonda parametre olarak başlangıç değeri belirliyoruz. Aşağıdaki kodları örnek olarak gösterebiliriz.

Route::get('uye/{isim?}', function ($isim = "Oğuzhan Şahin") {
    return $isim;
});

Örnek çıktılar:

İfade Kısıtlamaları

İfade kısıtlamasından kastığımız örneğin girilen değerin sadece sayı veya sadece sef link için geçerli karakterlerin olmasını istiyoruz. Bunun için geçerli koşulu düzenli ifade kullanmalıyız. Örnek bir rota tanımlaması yapalım.

Route::get('uye/{isim}', function ($isim) {
    return $isim;
})->where('isim', '[A-Za-z-]+');

Burada gördüğünüz gibi where methodu devreye giriyorz. İlk parametresi olarak parametre ismini girdik ve ikinci parametrede düzenli ifademizi girdik.

Birden fazla parametre için kısıtlama yapmak istiyorsak parametre olarak bir dizi veriyoruz. Anahtar adı olarak parametre ismi ve değerini düzenli ifade olarak tanımlıyoruz. Örnek bir tanımlama yapalım.

Route::get('yazi/{id}/{sef}', function ($id, $sef) {
    return $id . " - " . $sef;
})->where(['id' => '[0-9]+', 'sef' => '[A-Za-z-]+']);

İfade kısıtlamasını her rota için geçerli kılma

Örneğin id ismini verdiğiniz her parametrede aynı kısıtlamayı kullanmak istiyorsunuz ama her seferinde bunu rotada tanımlamak istemiyorsunuz. Bunun için RouteServiceProvider dosyasını düzenlemeniz gerekiyor. Bu dosya app/Providers içerisinde bulunmaktadır. Bu dosyanın içerisinde bulunan boot methodunun içerisinde işlemimizi yapacağız.

public function boot()
{
    Route::pattern('id', '[0-9]+');

    parent::boot();
}

Burada rotalar için bir desen tanımladık. Bunu Route sınıfının içerisinde pattern (desen) fonksiyonunu kullanarak yaptık. Bu fonksiyon 2 parametre almaktadır. İlk parametre rotalarda kullandığımız parametre adını giriyoruz. İkinci parametre olarak da kısıtlama için düzenli ifademizi giriyoruz.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir