pillinetwork hesabınızla giriş yapın.

CodeIgniter'da Adres Yönlendirme

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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.

1
2
3
4
5
6
7
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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');
}
}

/* fatigue yazdı. 30 Mart 2009 11:33. 2 yorum var */

Yorumlar

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 :)

vay beee :) ne güzel

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu Yazıyı Tutanlar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

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.

pilliilan

son yorumlar

arama

pillinetwork