CodeIgniter’da Core Sınıflarını Değiştirme ve Override

Merhaba,

Bu yazımda CodeIgniter’da mevcut core sınıflarına nasıl müdahale edebileceğimizi ve override işleminin nasıl gerçekleştiğini anlatacağım. (Bu anlatımda CodeIgniter 2.0 versiyonu kullanılmıştır.)

Override edeceğimiz fonksiyonların içinde bulunduğu classlar default olarak CodeIgniter’in system dosyasının içinde bulunuyor; ancak bizim yeni oluşturacağımız classlar burada olmayacak. Yeni oluşturacağımız class’ı application/core/ dizinin içine koyacağız. Burada dikkat etmemiz gereken iki önemli husus var:

1) Değiştirmek istediğiniz system klasörünün içindeki class neyse, yeni oluşturduğunuz class’a MY ön eki getirmeniz gerekiyor. Örnek vermek gerekirse,

application/system/core/ dizinin içindeki Controller.php dosyasındaki bir fonksiyon için override yapacaksanız, yeni controller dosyanızın adresi tam olarak şu adreste ve şu isimle olmalı.

application/core/MY_Controller.php

Tabi class’ın adını da yukarıda verdiğimiz şekilde belirlememiz gerekiyor.

2) İşin büyük kısmını hallettikten sonra, ikinci ve basit kısımsa; tanımladığımız yeni class’ın yerini CodeIgniter’a göstermektir. Bunun için application/config/ dizini içindeki config.php‘yi açın ve aşağıdaki satırı ekleyin:

$config['subclass_prefix'] = 'MY_';

Böylece yeni class’ımızı da belirtmiş olduk. Yeni class’ınızın içinde aşağıdaki gibi constructor’ı tanımlamayı ve değiştirmek istediğiniz class’ı extend etmeyi de ihmal etmeyin.

if(!defined('BASEPATH')) exit('No direct script access allowed');class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
}
}

Artık Controller’da değiştirmek istediğiniz fonksiyonları MY_Controller‘da istediğiniz gibi tekrar tanımlayabilirsiniz. Kullanmanız gereken yerlerde de default olarak Controller’ın extend edildiği yerlerde, yeni oluşturduğunuz MY_Controller.php dosyasınıextend ederek kullanabilirsiniz. Bu işlemi CodeIgniter’daki tüm sistem dosyaları için yapabilirsiniz. Böylece CodeIgniter’da override işlemini de gerçekleştirmiş olduk.