URL Yapısı
"URL::base() ve URL::site() kullanımları farklıdır. Özellikle varlık dosyalarına yol verilirken URL::base(), [a] etiketi ile köprü oluştururken URL::site() kullanılmalıdır."
ZN Framework ile geliştirilen bir projede istek aşağıdaki gibi örnek bir web adresine yapılır. ZN ile kullanılan URL yapısını anlamak ZN Framework kullanımını anlamak açısından oldukça önemlidir.
URL | ||||||
Temel Bölüm | Göreceli Bölüm | Rotalanabilir Bölüm | ||||
http[s]:// | yourdomain.com/ | [project-name/] | [lang/] | [controller/] | [function/] | [param1/param2 ...] |
Yukarıdaki URL bölümleri aşağıda aşama aşama incelenmiştir.
# Bölüm Başlıkları
# HTTP/S
# HTTPS Dönüşümü
# Port Değiştirme
# HTTP'yi Yakalama# HTTP Değeri ile Birlikte Yakalama
# Ön Tanımlı Proje Dizini
# Takma İsim Kullanımı
# Proje Dizinini Yakalama# Dil Değerinin Değişimi
# Aktif Dili Yakalama# Ön Tanımlı Kontrolcü
# Kontrolcü Adını Yakalama
# HTTP/S
ZN Framework'te site içi bir URL oluşturmak için URL::site() yöntemi kullanılır. Bu yöntem ile oluşturulan linklerin http:// olan ön eki sitede SSL sertifikasının aktif edilmesi durumunda https:// olarak değişir. Bu dönüşüm otomatik olarak yapılır. Bunun için ekstra bir ayar yapılmasına gerek yoktur. Bu nedenle sitede kullanılan tüm linklerin URL::site() ile yapılması gereklidir. Link bir .css veya .js gibi bir yerel dosyayı gösterecekse URL::site() yerine URL::base() kullanılmalıdır.
echo URL::site('product/list');
Sitenize güvenlik sertifikası kurduğunuzda linkler otomatik olarak http den https'ye dönüşür.
echo URL::site('product/list');
IIS sunucularda HTTPS için 443 dışında başka bir portun kullanılması durumunda linklerin otomatik olarak https ye dönüşebilmesi için aşağıdaki düzenleme yapılmalıdır.
# ZN::run() yönteminden önce
$_SERVER['SERVER_PORT'] = 443;
Şeklinde manipüle edilerek SSL portunun doğru eşleşmesi sağlanmalıdır.
URL'nin bu değerini elde etmek için aşağıdaki yöntemi kullanabilirsiniz.
echo Request::scheme();
# Alan Adı / Domain Name
Bu değeri elde etmek için Http::host() yönteminden yararlanabilirsiniz.
echo Http::host();
http://localhost değerini yakalamak için aşağıdaki yöntemden yararlanabilirsiniz.
echo URL::host();
# Proje Adı / Project Name
Projects/ dizini içerisinde yer alan proje dizinlerinden çalıştırılacak olanın adını içeren bölümdür. Çalıştırılacak dizin ön tanımlı (Frontend/) dizin ise yazılmaz. Bunun dışında yer alan dizinleri çalıştırmak için dizin adı yazılır. Şayet Frontend/ dizini ön tanımlı olduğu için bu dizinin çalıştırılması için doğrudan host adının yazılması yeterlidir.
Ancak farklı bir proje dizinin çalıştırılmak istenmesi durumunda URL'ye belirtilir.
Yukarıdaki istek Projects/Backend/ dizini çalıştırır.
Ön tanımlı olarak çalıştırılan proje dizini Projects/Frontend/ dizinidir. Ön tanımlı açılış proje dizini değiştirmek için aşağıdaki yapılandırma dosyasından gerekli ayarı yapabilirsiniz.
'default' => 'Frontend'
Proje dizinlerinize erişmek için bu dizin isimlerini temsil edecek takma isimler verebilirsiniz. Bu ayarı düzenlemek için aşağıdaki yapılandırma dosyasını kullanın.
'panel' => 'Backend'
Yukarıdaki düzenlemeden sonra aşağıdaki URL üzerinden Backend/ dizinini çalıştırabilirsiniz.
Bu bölümün ne için kullanıldığıyla ilgili detaylı bilgiye Çoklu Proje Geliştirme bölümünden ulaşabilirsiniz.
URL üzerinde çalıştırılmakta olan proje dizini adının gerekli olması durumunda CURRENT_PROJECT sabiti ile ilgili proje adı elde edilir.
echo CURRENT_PROJECT;
# Dil / Lang
Bu bölüm ön tanımlı olarak kapalıdır. Sitenin seçili dil değerini gösterir. Seçili dil kısaltmasının URL üzerinde görüntülenebilmesi için yapılandırma dosyasından aktif hale getirilmelidir. Bu işlemin yapılması durumunda URL::site() yöntemi ile oluşturulan linkler de bu dil ekini alır. Dile ekinin URL üzerinde görüntülenebilir olması için aşağıda yolu belirtilen yapılandırma dosyasından aktif hale getirilmelidir.
'lang' => true
Yukarıdaki düzenlemeden sonra URL::site() yöntemi aşağıdaki çıktıyı üretir.
echo URL::site('product/list');
Bu değeri değiştirmek için Lang::set() yöntemiden yararlanılır.
Lang::set('tr');
echo URL::site('product/list');
Bu değişiklik aynı zamanda URL üzerinden kullanıcıların bu değeri değiştirip çalıştırması ile de mümkündür.
O an seçili olan dil kısalmasını yakalamak için Lang::get() yöntemiden yararlanılır.
echo Lang::get();
Bu bölüm ile ilgili anlatım Dosya Dil Kütüphanesi bağlantısında yapılmıştır.
# Kontrolcü / Controller
Bu bölüm ZN Framework'te Controllers/ dizininde yer alan kontrolcülerden hangisinin çalıştırılacağını belirler. Hiç bir kontrolcü adı belirtilmeden yapılan isteklerde ön tanımlı olarak çalışan kontrolcü Home kontrolcüsüdür. Bu bölüm ile ilgili anlatım İsteklerin Kontrol Edilmesi bağlantısında yapılmıştır.
Ön tanımlı kontrolcü bilgisini değiştirmek için aşağıdaki yapılandırma dosyasını kullanabilirsiniz.
'openController' => 'Home'
Kontrolcü adını yakalamak için CURRENT_CONTROLLER sabiti kullanılmalıdır. Farklı yöntemlerle de bu bölüme erişebilir olsa da bu sabit rotalardan etkilenmediği için gerçek kontrolcü adını verir.
echo CURRENT_CONTROLLER;
# Yöntem / Function
Bu bölüm bir önceki bölümle ifade edilen kontrolcüye ait fonksiyon bilgisini ifade etmektedir. Hiç bir yöntem adı belirtilmeden yapılan isteklerde ilgili kontrolcünün main yöntemi devreye girer. Yine bu bölümün kullanımı ile ilgili anlatım İsteklerin Kontrol Edilmesi bağlantısında yapılmıştır.
Ön tanımlı kontrolcü yöntemi bilgisini değiştirmek için aşağıdaki yapılandırma dosyasını kullanabilirsiniz.
'openFunction' => 'main'
Yöntem adını yakalamak için CURRENT_CFUNCTION sabiti kullanılmalıdır. Bu sabit o anda çalıştırılmakta olan gerçek fonksiyon adını verir. Bu sabit rotalardan etkilenmez.
echo CURRENT_CFUNCTION;
# Parametreler / Parameters
Çalıştırılan kontrolcünün yöntemine veri göndermek için kullanılan bölümdür. Bu ve bundan sonraki bölümlerin tümü parametre gönderimi için kullanılır.
Parametreleri yakalamak için CURRENT_CPARAMETERS sabiti kullanılabilir. Bu sabit dışında ilgili yöntemin parametrelerine tanımlayacağınız sıralı değişkenlerle de parametreleri yakalayabilirsiniz.
output( CURRENT_CPARAMETERS );
1 => string 'example' ( length = 9 )
2 => string 'value' ( length = 7 )