Kütüphane Oluşturmak
"Kütüphaneler" terimini kullandığımızda, normalde libraries dizini altında bulunan ve Kullanım Kılavuzunda Sınıf Referansı bölümünde tanımlı sınıfları kastediyoruz. Bununla birlikte, genel çatı kaynaklarından ayrılmak için application/libraries dizininde kendi kütüphanenizi nasıl oluşturacağınızı da tanımlıyoruz.
Bir ödül olarak, eğer mevcut kütüphanelere bazı fonksiyonellikler katmaya ihtiyacınız varsa, CodeIgniter kendi kütüphane sınıflarını genişletmek (extend) için izin verir. Hatta kendinizin hazırladığı aynı isimli kütüphaneyi application/libraries dizini altına kopyalayıp, kendi kütüphanenizi kullanabilirsiniz.
Özetle:
- Yeni kütüphane oluşturabilirsiniz.
- Mevcut kütüphaneyi genişletebilirsiniz.
- MEvcut kütüphanenin üzerine yazabilirsiniz.
Aşağıda bu üç madde kapsamının detayları anlatılır.
Not: Veritabanı ve PHP 4 için Loader (yükleme) sınıflarını genişletemez, kendi sınıflarınızla üzerine de yazamazsınız. Diğer bütün sınıfların üzerine yazılabilir/genişletilebilir.
Depolama
Kendi kütüphaneleriniz application/libraries dizininde, CodeIgniter başladığında baktığı yere konulmalıdır.
İsimlendirme Düzeni
- Dosya adı büyük harfle yazılmalıdır. Örneğin: Myclass.php
- Sınıf tanımlaması büyük harfle başlamalıdır. Örneğin: class Myclass
- Dosya adıyla sınıf adı aynı olmalıdır.
Sınıf Dosyası
Sınıflar şu örnekteki gibi olmalıdır (Not: Basit olması için Someclass ismini kullandık):
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Someclass {
function some_function()
{
}
}
?>
Kendi Sınıfınızı Kullanmak
Herhangi bir Controller fonksiyonundan sınıfınızı çalıştırmak için standart:
$this->load->library('someclass');
Burada someclass dosya adı, ".php" dosya adı olmadan kullanılır. Dosya adını büyük ya da küçük harfle kullanmanız. CodeIgniter için önemli değildir.
Bir kete yüklendikten sonra sınıfınızı küçük harfli olarak kullanırsınız:
$this->someclass->some_function(); // Object instances will always be lower case
Sınıf Başlatılırken Parametre Göndermek
Kütüphane fonksiyonu yüklenirken, ikinci parametre yerine bir dizi değişkeni dinamik olarak gönderilir ve bu değişken sınıf contructor kısmına aktarılır:
$params = array('type' => 'large', 'color' => 'red');
$this->load->library('Someclass', $params);
Eğer bu özelliği kullanacaksanız, sınıf constructor kısmına beklediğiniz bilgiyi ayarlamalısınız:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Someclass {
function Someclass($params)
{
// Do something with $params
}
}
?>
Ayrıca parametreleri config dosyasına da gönderebilirsiniz. Aynı isimli bir config dosyasını application/config/ dizini altına açmalısınız. Ancak yukarıdaki dinamik yolu kullanarak parametre gönderiyorsanız, config dosya opsiyonu kullanılamayacaktır.
Kütüphanenizde CodeIgniter Kaynaklarını Kullanmak
CodeIgniter kaynaklarına kendi kütüphanenizden giriş için get_instance() fonksiyonu kullanılır. Bu fonksiyon CodeIgniter süper objesine döner.
Normalde controller fonksiyonalarında, mevcut CodeIgniter fonksiyonlarını kullanırken $this yapısıyla çağrılır:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
gibi.
Bununla birlikte, $this sadece contoller, view ya da model dosylarında çalışır. Eğer CodeIgniter sınıflarını kendi yazdığınız kütüphanenizde kullanmak istiyorsanız, aşağıdaki gibi yapabilirsiniz:
Önce, CodeIgniter objesini bir değişkene atayın:
$CI =& get_instance();
Objeyi bir kez bir değişkene atayınca, değişkeni kullanırken $this değişkeni yerine kullanmalısınız:
$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
gibi.
Not: Yukarıda bahsedilen get_instance() fonksiyonunu bir değişkene aktarmayı unutmayın:
$CI =& get_instance();
Bu çok önemlidir. Bir değişkene atamak CodeIngiter objesini kopyalamak yerine, orijinal olanını kullanmanızı sağlar.
Ayrıca, lütfen dikkat:
Eğer PHP 4 kullanıyorsanız, get_instance() fonksiyonunu sınıfın contructor kısmından çağırmaktan kaçınmalısınız. PHP 4, sınıfın constructor kısmını tamamen desteklemediği için, CI super objesini yüklemekte sorun çıkartır.
Mevcut Kütüphaneleri Kendi Versiyonlarınızla Yenilemek
CodeIgniter'ın kütüphanesi yerine kendi kütüphanenizi kullanmak için kütüphanenin adını sınıf adının aynısı olarak isimlendirmelisiniz. Bütün özellikleri kullanmak için, dosya adını ve sınıf bildirimi mevcut kütüphane ile tamamen aynı olmalıdır. Örneğin, Email kütüphanesini yenilemek için, application/libraries/Email.php dosyasını oluşturmalı ve sınıfınızda şöyle bildirmelisiniz:
class CI_Email {
}
Unutmayın, bir çok mevcut sınıf CI_ öneki ile başlar.
Kendi kütüphanenizi yüklemek için standart yükleme fonksiyonunu kullanacaksınız:
$this->load->library('email');
Not: Veritabanı sınıfları kendi hazırladığınız sınıflar ile yer değiştiremez.
Mevcut Kütüphaneleri Genişletmek
Eğer tüm ihtiyacınız mevcut kütüphaneye bazı işlevsellikler kazandırmak -belki bir ya da iki fonskyion eklemek-, sonra da kullandığınız mevcut kütüphaneyi sizin kütüphanenizle yerdeğiştirmek ve onu durdurmak ise, sınıfı genişletmek daha uygun olur. Sınıf genişletmek neredeyse, mevcut sınıf ile yer değiştirmek gibidir, şu farkla :
- Ana sınıf bildirimi mutlaka yapılmalıdır.
- Sizin sınıf ve dosya adınız mutlaka MY_ öneki ile başlamalıdır (Bu değer değiştirilebilir. Aşağı bakın.).
Örneğin, mevcut Email sınıfı için, application/libraries/MY_Email.php dosyasını oluşturmalı ve kendi sınıfınızda bildirim yapmalısınız:
class MY_Email extends CI_Email {
}
Not: Eğer sınıfınızda constructor kullanmaya ihtiyacınız varsa, ana constructor'ü de genişletmelisiniz:
class MY_Email extends CI_Email {
function My_Email()
{
parent::CI_Email();
}
}
Alt-Sınıfınızı Yüklemek
Alt-sınıfnızı normal imla kullanarak yükleyebilirisniz. Öneki KOYMAMALISINIZ. Mesela, yukarıdaki Email sınıfının genişletildiği örnekte, şöyle kullanacaksınız:
$this->load->library('email');
Bir kere yüklediğinizde genişlettiğiniz sınıftaki değişkenleri kullanacaksınız. Email sınıfı örneğinde bütün çağrılar şöyle yapılmalıdır:
$this->email->some_function();
Kendi Önekinizi Ayarlamak
Kendi alt-sınıfınızda kullanacağını önekinizi ayarlamak için, application/config/config.php dosyasını açın ve şunu arayın:
$config['subclass_prefix'] = 'MY_';
Lütfen unutmayın, CodeIgniter'ın bütün mevcut kütüphaneleri CI_ önekini kullanır, bu nedenle siz KULLANMAYIN.