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 :

class Indir extends Controller {function Indir(){parent::Controller();}function index($dosya_adi){$this->load->model(‘Indir_model’, ‘Indir’);$array = array(‘dosya_adi’ => $dosya_adi,’tarih’ => date(‘Y-m-d h:i:s’),’ip_adresi’ => $this->Indir->get_ip());if($this->Indir->Indir_log($array)) redirect(‘assets/’.$dosya_adi);else redirect(‘error/not_found_Indir’);}}

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.

function _remap($method) {if ($this->uri->segment(2)) {$method = $this->uri->segment(2);}$this->index($method);}

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.

class Indir extends Controller {function Indir(){parent::Controller();}function _remap($method) {if ($this->uri->segment(2)) {$method = $this->uri->segment(2);}$this->index($method);}function index($dosya_adi){$this->load->model(‘Indir_model’, ‘Model’);$array = array(‘dosya_adi’ => $dosya_adi,’tarih’ => date(‘Y-m-d h:i:s’),’ip_adresi’ => $this->Model->get_ip());if($this->Model->Indir_log($array)) redirect(‘assets/’.$dosya_adi);else redirect(‘error/not_found_Indir’);}}