Kohana Framework’ünde Routing işlemleri

Hemen hemen her ’de  (rotalama veya yönlendirme) işlemleri çok önemlidir. Rota () ismi verilen tanımlamalara göre adres satırından gelen URIayrıştırılır ve böylece Controller, Action ve Parameters gibi bilgiler tespit edilir. Diğer bir değişle rotalar, dışarıdan yapılan isteklerin uygulamamız içerisinde hangi yollardan geçeceğine karar verirler. ‘da bu tanımlamaları yapmak hem çok kolay hem de çok esnektir. Bu yazıda ’daki rotalara yakından bakacağız.

Kohana’da rotalar…

Kohana’da bütün rotalar application klasöründe bulunan bootstrap. dosyasının en sonunda bulunuyor. Varsayılan olarak 1 tane rota tanımlı geliyor. Rota tanımlamak için Route sınıfının set metodu kullanılıyor. Bu metot 3 tane parametre alıyor (son parametre opsiyonel).

Rota ismi benzersiz bir isim olmalıdır. Ola ki aynı isme sahip birden fazla rota tanımlanırsa, ilk tanımlanmış olan rota geçerli olacaktır.

Rota içerisinde gördüğünüz “controller”, “action” ve “id” kelimeleri ise rota anahtarları (keys) olarak isimlendirilir. Her bir anahtar < ve > sembolleri arasında tanımlanmak zorundadır (html etiketleri gibi). controller ve action anahtarları Kohana için özel anahtarlardır. Çünkü Kohana bu özel anahtarlar sayesinde sizin yazmış olduğunuz Controller sınıfını buluyor ve bu sınıf içerisindeki metodu çalıştırıyor. Bu sebeple, bu özel anahtarları mutlaka Rota içerisine yazmamız gerekir.

Regex bölümünde ise URI eşleştiriliyorken hangi key için nasıl bir regex şablonunun kullanılacağını tanımlanır. Bu bölüme birşey yazmazsanız Kohana, kendi içerisindeki varsayılan regex şablonunu kullanacaktır. Bu bölüme daha sonra daha yakından bakacağız.

Rota anahtarları ve bir rotanın yapısı

Daha önce dediğim gibi rotalar aslında KEY adı verilen anahtarlardan oluşur. <key> şeklinde bir anahtar tanımlamış oluruz. Bu keyler daha sonra URI içerisindeki gerçek değerler ile yer değiştirecektir. Örneğin URI’den welcome/index/10 şeklinde bir bilgi geldiğini varsayalım. Rotamız ise <controller>/<action>/<id> şeklinde tanımlanmış olsun. Bu durumda eşleşme şöyle olacak:

Opsiyonel olmasını istediğimiz anahtarı ( ile ) parantezleri arasına alırız. Böylece URI’den gelmesini beklediğimiz bir değer gelmediğinde de routing işleminin başarılı olmasını sağlarız. Örneğin üstteki örnekte URI içerisinden 10 değeri gelmezse yönlendirme işlemi başarısız olacak, uygulamamız duracaktır. Biz bu 10 değerinin gelmediği zamanlarda da uygulamamızın devam etmesini istiyorsak, Rota tanımlarken “id” anahtarının opsiyonel olduğunu belirtmeliyiz. Bunu şöyle yapabiliriz:

Artık URI’den welcome/index şeklinde bir bilgi gelse bile routing işlemi başarılı olacaktır. Peki ama bu değer gelmediği zamanlarda, bunun yerine varsayılan bir değer kullanabilir miyiz?

Rota anahtarı için varsayılan değer tanımlama

Önceki örnekten devam edelim. Uygulamanız içerisinde URI’den gelen “id” değeri ile işlemler yapıyorsunuz. print $this->param('id') gibi mesela… Fakat bu değer URI’den gelmezse uygulamamız kararsızlaşabilir veya hata üretebilir. İşte bu sebeple “id” parametresi için varsayılan değer atamalıyız. Varsayılan değerleriRoute sınıfının defaults metodu ile şöyle yapıyoruz:

 

Artık URI’den welcome/index şeklinde veya welcome/index/10 şeklinde bilgi gelse bile routing işlemi başarılı olacak ve uygulamamız çalışmaya devam edecektir.

Anahtar değerleri için regex şablonları tanımlama

Route::set() metodunun en son parametresine, URI’den gelen değerler için özel regex şablonları tanımlayabilirsiniz. Örneğin biz “id” anahtarının değerini 10 olarak bekliyoruz. Fakat ya kullanıcı 10 değil de yazıyla “on” değeri gönderirse? Bu durumda tip uyuşmazlığı sebebiyle yine uygulamamız kararsızlaşacak veya hata verecektir. Şimdi biz Kohana’ya “id” anahtarıyla eşlecek olan değer “yalnızca iki basamaklı sayıdan oluşabilir” diyelim. Bunun için rota tanımlamasını şöyle değiştiriyoruz.

Artık URI’den gelen ve “id” anahtarı ile eşlecek olan değerin 2 basamaklı bir sayı olduğunu garanti altına almış oluyoruz. Aksi bir durumda routing işlemi başarısız sayılacak ve uygulamamız durdurulacaktır.

Bir başka özel anahtar: directory

Her ne kadar yukarıda yalnızca “controller” ve “action” özel anahtarlarından bahsetsem de aslında “directory” adında son 1 özel anahtar daha var. Yazıyı bitirmeden önce bundan da bahsetmek istiyorum. Biliyorsunuz ki bütün yazdığımız Controller sınıfları Kohana’nın application/classes/controller klasörü altında yer alıyor. Ama bazen bu klasör altında “alt klasörler” de açmamız gerekiyor.

Örneğin bir sitenin yönetim paneli için yazacağımız Controller sınıflarını “admin” isimli bir alt klasörde toplamak isteyebiliriz. Bu alt klasördeki Controller sınıflarına adres satırından erişmek için rota içerisinde directory isimli özel anahtarı kullanmamız gerekiyor. Diyelim ki URI’den gelen bilgi admin/member/edit/45 şeklinde olsun. Bu durumda rotamızın yapısı şu hale gelecktir.

Bu yapıyı dikkate alarak rota içerisinde “directory” anahtarını eklememiz gerekecek:

Artık URI’den admin/member/edit/45 şeklinde bir bilgi geldiğinde Kohana “admin” klasörüne girecek, buradaki “Controller_Admin_Member” sınıfından bir örnek oluşturup bu sınıfın “action_edit()” metodunu çalıştıracaktır. Bu metoda da parametre olarak “45” değeri yerleştirecektir. Bu işlemi konuşma diline dökecek olursak Kohana’ya “45 nolu üyenin bilgilerini Admin olarak düzenlemek istiyorum” demiş oluyoruz.

Son sözler…

bootstrap.php dosyasının sonuna bu yazıda bahsettiğim gibi kendi uygulamanıza özel rotalar tanımlayabilirsiniz. Dikkat etmeniz gereken nokta, bütün rotaları Kohana ile birlikte gelen “default” ismindeki rotadan önce tanımlamanız. Çünkü Kohana sizin rotalarınızdan birisini kullandığı zaman ve “başarılı” olarak işaretlediği zaman geri kalanları kontrol etmeyecektir. Eğer tanımladığınız hiçbir rota başarılı olmazsa, en son “default” isimli rota denenecektir.

Ben bu yazıda rotaların daha çok yapısını anlatmaya çalıştım. Yazıda pek örnek olmaması veya daha derin bilgiler olmaması bu yüzdendir. Eğer siz daha fazlasını istiyorsanız Kohana dökümantasyonundaki Routing açıklamalarına http://kohanaframework.org/3.0/guide/kohana/routing adresinden ulaşabilirsiniz.

Bir Cevap Yazın

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