CodeIgniter'ın ulaşımı, yapısı gereği site_adı/controller_adı/method_adı/degisken1/degisken2 olarak kuruludur. Ancak bazı durumlarda controller dosyası tek bir method'tan oluşabilir. Bu method index() ismini verdiğimiz varsayılan method olabileceği gibi herhangi bir isimle yazacağımız bir method da olabilir.
Bu durumda sayfaya ulaşım adresini klasik adres yolu ile gereksiz yere uzatmamak için, method_adı kısmını kaldırmak daha doğrudur. Bu işi iki yolla gerçekleştirebilir. Birincisi, MY_Router.php isimli kütüphane dosyasını yazarak bunun içinden yönlendirme; ikincisi ise, Remap fonksiyonu ile çözme.
Herkesin indirmesine izin verdiğimiz dosyalarımızın istatistiğini tutmak üzere bir controller yazdığımızı düşünelim. Site adresimiz site_adi/indir/dosya_adi olduğunu farzedelim. Daha önce de dediğimiz gibi klasik CodeIgniter site adresi site_adi/indir/method_adi/dosya_adi şeklinde olması gerekirken, bizim durumumuzda bu adreste method_adi kısmını kaldırmak daha uygun olacaktır.
Controller dosyamız ana hatları ile aşağıdaki gibidir :
|
|
Indir isimli controller çalıştırıldığında index method'una gidilecek, dosya adına göre model dosyasında bulunan Indir_log methodu çağırılarak, veritabanı içine istemin yapıldığı tarihi ve makineden gelen ip adresi eklenecektir. Eğer bir hata olursa da error isimli controller çağrılacaktır, hata yoksa "assets" dizini altında bulunan dosyayı kullanıcıya yönlendirecektir.
Buraya kadar bilindik yapı ve kodlama yapılmıştır. Ancak Indir controller'ı çağrıldığında başka gelen adres satırından başka method yerine index methodunun çağrılması ve bu dosya_adi değişkeninin alınması işlemi için, controller dosyamız içine _remap fonksiyonunu eklemek gereklidir.
|
|
Bu fonksiyonda uri sınıfı yardımı ile adres satırında 2. değeri olan dosya adını $method isimli değişkene atıp (1. değer controller adıdır), index method'una da bu adı göndermekteyiz. Böylece adres satırında site_adi/indir/dosya_adi olarak linkin görülmesine olanak sağlanmaktadır. Controller dosyasının tam hali aşağıdadır.
|
|
sonraki yazı mySQL'de Recordcount (Toplam Kayıt) Kullanımı |
config/route.php dosyasına bu satırı eklersek,
$route['indir/:any'] = "indir/method_adi/$1";
istediğimizi yapmış oluruz zannedersem. remap fonksiyonuna gerek kalmaz gibi.
site_adi/indir/dosya_adi adresine girdiğimiz zaman , otomatikman site_adi/indir/method_adi/dosya_adi şeklindeymiş gibi algılanıp ilgili controller ve method çağırılmış olacaktır.
bi yol da benden oluversin :)
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.