Çarşamba, 13 Ağustos 2008

MVC Yapısı: Controller Dosyası ve Kullanımı

 

MVC tanımının son öğesi Controller`dır. Controller adından da anlaşılacağı üzere, tüm sistemin kontrol öğesi olarak uygulamaya yön verir. Model ile View elemanları arasında bir bağ kurar. Kullanıcının link ile ekrandan çağırdığı eleman Controller`dir.

Bir kontroller dosyası dosyaya da adını veren Controller`ın ismi ile açılır. Bu dosyalar application/controllers dizini altında bulunurlar. Uygulama içinde kullanılacak library, helper, view, model gibi öğeler Controller içinden yüklenir.

class User extends Controller {

    function User()
    {
        parent::User();
    }
 
    function index()
    {
//eğer User adı ile çalışacak uygulama varsa buraya yazılır.
    }

    function list()
    {
//User_model yükleniyor.
       $this->load->model('User_model', 'User');
//User_model içinden bir fonksiyon çağırılıyor
      $data['son_mesaj'] = $this->User->son_mesaj();
//view dosyasına load ediliyor
     $this->load->view('user_view',$data);
    }
}

Kullanıcı http://www.siteadi.com/user/list linkine tıklayınca yukarıda örnek kodunu gördüğümüz User controller `ın içindeki list fonksiyonu çalışacaktır. Her uygulamada mutlaka en az bir tane Controller olması gereklidir. Ana hatları ile bir Controller öğesinin nasıl olacağını yukarıda anlattım. Bundan sonraki yazılarda biraz daha detay anlatmaya gayret edeceğim.

Yorumlar

Merhaba. MVC yapısınında yeniyim. Uygulamamda her farklı sayfam için (birbirinden bağımsız, sadece header ve footer dosyalarını beraber kullanıyorlar) birer tane Control yaratmalı mıyım ? Yoksa hepsini tek bir kontrolde toplamam performans açısından daha mı doğru olur ? Aslında mantıklı olan ilki ama sayfaların yarısı 3-4 satır koddan oluşuyor. Muallakta kaldım :)

@Aykut: Controller dosyanı belirlerken gruplandırma yapmaya gitmelisin. Örneğin, kullanıcılar ile ilgili işlemleri (kayıt olma, şifre değiştirme, mail değiştirme vs.) user isimli tek bir kontrol altında farklı isimli metodlarla toplamanda fayda olur. Böylece daha derli toplu bir kodlama yamış olursun.

Öteki türlü, her bir işlem için Controller açarsan ileride hangi iş için hangi Controller ı kullandığını bile unutuabilir, her dosyayı teker teker açmak durumunda kalırsın. Belki de aynı kodu defalarca tekar tekrar yazar durursun.

Yukarıda dediğim gibi, sayfalar birbirinden bağımsız, o yüzden gruplama yapamıyorum. 7-8 tane controller olması performansı etkiler mi ?

@Aykut: Tek bir Controller altında toplaman adres satırında biraz düzenleme yapmanı (kendi router dosyanı yazmanı) gerektirebilir. Onun dışında işleyiş açısından bir sorun olmaz sanırım. Yine de sayfa yüklenme sürelerini kontrol edebilirsin, farkı görmek için.

Cevap için teşekkürler. Şuan CodeIgniter'da pratiğimi artırmak için elimdeki içerik yönetimli ufak projeyi CI ile kodluyorum. Dediğiniz gibi hızı test edip uygun olanını seçeyim.

Yorum Ekle