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

CodeIgniter'da Kütüphane Yazmak

CodeIgniter, PHP üzerine yazılmış ve MVC (Model-View-Controller) kalıbı kullanan bir çatıdır (framework). Eşdeğer PHP çatıları arasından hızlı oluşu, elastikliği ve öğrenim kolaylığı açısından diğerlerinden öne çıkmaktadır. Ancak, CodeIgniter küçük çaplı internet sitelerinde uygulanması dezavantajı nedeniyle, MVC yapılarına ilk başlayan programcılar için tercih edilir.

CodeIgniter, paket kütüphanelerinin yanı sıra kullanıcının yazacağı kendi kütüphanelerini de kabul etmektedir. Bu yazıda CodeIgniter ile Java uygulama çatısı MooTools'un birlikte çalışması için kendimize ait bir kütüphane yazacağız.

Kendi yazdığımız kütüphanelerimizi applicaiton/libraries dizini altına yükleyeceğimiz için önce bu dizin altına mootools.php isimli bir dosya açıyoruz. Dosyayı düzenlemek için bir editör programda açıp ilk satırına aşağıdaki cümleyi ekliyoruz :

1
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

Bu cümle ile birlikte dışarıdan gelecek bir saldırıda kütüphanemizin çalışmasını engellemiş oluruz. Kendi yazacağımız her türlü CodeIgniter kütüphanesi için ilk iş bu satırı eklemek olmalıdır. Ancak, bu satır model, view ve controller dosyalarında olmamalıdır.

Daha sonra kütüphanemizin adının olduğu sınıfı yaratıp, içinde kullanacağımız sabitleri birer değişken ismini atıyoruz:

1
2
3
4
5
class Mootools{
var $mootools_file = 'js/mootools-release-1.11.js';
var $newline = "\n";
var $tab = "\t";

Burada $mootools_file değişkeninde mootools'un kullandığımız versiyonunun bulunduğu dizini tanımlıyoruz. Diğer değişkenler de sırasıyla, yeni satır ve tab değişkenleridir.

Mootools kütüphanesi çalıştırıldığında CodeIgniter tarafından kontrol edilecek ilk sınıf kütüphanenin kendi adı ile olan sınıfı, yani Mootools metodudur. Bu metodta, Mootools sınıfı çalıştırılarak kayıtlara (log) sınıf ile ilgili mesajlar gönderilir. Eğer tanımlanan dizinde Mootools dosyası bulunamadıysa hata mesajı olarak ekrana ve kayıtlara bilgi verilir.

1
2
3
4
5
6
7
8
9
10
function Mootools(){
$this->obj =& get_instance();
log_message('debug','Mootools Kütüphanesi '.get_class($this->obj).' sınıfı ile başlatıldı');
$this->obj->load->helper('url');
if (!file_exists($this->mootools_file)) {
log_message('error','Mootools dosyası ' . $mootools_location.' adresinde bulunamadı.');
show_error('Mootools dosyası ' . $mootools_location.' adresinde bulunamadı.');
}
}

Kütüphanemizi başlatmak için başlangıç metoduna ihtiyacımız olduğu için init() metodunu tanımlıyoruz:

1
2
3
4
function init()
{
return '<script type="text/javascript" src="' . base_url() . $this->mootools_file . '"></script>' . $this->newline;
}

Kütüphanemizde son olarak yapacağımız iş, kullanacağımız değişik scriptler için amaca uygun kod parçaları yazmak olacak. Örneğin Mootools içinde kullanacağınız yazı editörü MooEditable için yazacağınız metod aşağıdaki gibidir. Bu metodta yer alan değişkenler sizin dosya kurulumunuza göre değişecektir:

1
2
3
4
5
6
7
8
9
10
11
12
13
function mooeditable(){
$output ='<link rel="stylesheet" type="text/css" href="'.base_url().'css/mooeditable.css" />
<script type="text/javascript" src="'.base_url().'js/MooEditable.js"></script>
<script type="text/javascript">
// <![CDATA[[
window.addEvent(\'load\', function(){
var mooed = new MooEditable($$(\'.mooeditable\'));
});
// ]]>
</script>
'. $this->newline;
return $output;
}

Kütüphanemiz ihtiyacınıza göre zenginleştireceğiniz metodlar ile gelişebilir. Ancak şimdilik bu kadar olduğunu düşündüğümüz kütüphanemizi nasıl yükleyip çağıracağımızı anlatalım. Kütüphanemizi çalıştırmak istediğimiz controller dosyasının içinde, ilgili metoda aşağıdaki kod parçasını yazmamız, kütüphaneyi çağırmamız için yeterlidir:

1
2
3
4
5
6
7
8
9
10
11
class Item extends Controller {
function Item()
{
parent::Controller();
}
function index()
{
$this->load->library('mootools');
$data['extraHeadContent'] = $this->mootools->init().$this->mootools->mooeditable();
}

Benzer şekilde MooTools için yazılmış bu kütüphaneyi diğer Java uygulama çatıları için de kendiniz geliştirebilirsiniz.

Spacer
Spacer
/* fatigue yazdı. 09 Şubat 2009 10:51. 5 yorum var */

Yorumlar

Güzel bir makale ellerinize sağlık
Codeigniter i çok sevdim ama neden bunu bi şirket geliştiriyor nerde kaldi özgür yazilim ruhu diyenler için sizi şöyle alalım

Bu MVC ve Framework piyasada çok dile dolandığından Zend Framework kullanmıştım yaptığım bir web uygulamasında. Aman Allah'ım neydi o yavaşlık ve çözmek için harcadığım zaman! PHP'de Framework ise kalsın ben almayayım. Tıpkı Rasmus abi gibi...

Bir de şöyle diyor Lerdorf;

He continues on by stating that PHP developers really need to think about performance for not only scalability reasons but for green reasons. If programs were more efficient it would cut the number of data centres and would reduce energy needs as a result.

@CeRBbeR: Ben neden bir şirketin geliştirdiği konusunu fazla önemsemiyorum açıkcası. Çünkü kodlar zaten açık, kullanım kılavuzu da herkesçe malum. Bu işi yapan insanlar da CodeIgniter üzerinden para kazanmak yerine ExpressionEngine isimli bir CMS yazmışlar oradan para kazanıyorlar. Şirket olmasının dezavantajı ileride desteği ve kodları kesmek olabilir. Ancak onda da Kohana gibi kendimiz de kendi MVC çatımızı geliştirebiliriz. Kaldı ki, CodeIgniter'ın da yeni versiyonlarında yeni kütüphaneler ve bir kaç düzenleme dışında çok kaydadeğer bir değişiklik görülmemesi sebebiyle, mevcut haliyle bile bu çatının uzun süre ihtiyaçlarımızı karşılayacak gibi duruyor.

Yine de tabii ki seçim programcının, herkes istediği çatıyı kullanmakta özgür.

@Alpharabius :

PHP'de Framework ise kalsın ben almayayım.

Bana kalırsa çatı kullanımının, seçilen dil ile fazla bir ilgisi yok. Kullanım zorluğu varsa hepsinde var. Bildiğiniz üzere programlamada kalıp (pattern) kullanımı, dörtlü çetenin hazırladığı "Design Patterns" isimli kitapta anlatılmaktadır. MVC kullanımı da teorisi 1970'lere dayanmakla birlikte bu kitapta güzel özetlenmiştir. Orada da bahsedildiği gibi tasarım kalıpları herhangi bir dilde yazılabilir. Bunda amaç daha az efor ile daha kullanışlı kodlar yazmaktır.

Eğer ilgilenirseniz, bu kalıplar ile ilgili olarak IBM'in web sitesinde anlatımlı ve PHP üzerine uygulamalı kod betikleri bulabilirsiniz.

Görüşleriniz için teşekkür ederim. Bir de yazdığım yazı da düzeltme olacak (gerçi düzelt butonu ile yaptım ancak, onay gerekiyor sanırım): Son grupta yer alan kod şöyle olmalıydı:

1
2
3
4
5
6
7
8
9
10
11
class Item extends Controller {
function Item()
{
parent::Controller();
}
function index()
{
$this->load->library('mootools');
$data['extraHeadContent'] = $this->mootools->init().$this->mootools->mooeditable();
}

Framework lerin yavaslıgı bılınmeyen bir sorun degil. Ancak aşılmıcak bir sorunda degil. O Çatıyı kuran yazılımcı yeterlı bılgı ve deneyim sahıpse ve dogru configurasyonu uygularsa hız sorunu sorun olmaktan çıkıyor. Bununla birlikte tonlarca satır koddan sıyrılmıs oluyor ve sitenıze eklıyegınız yenı ozelıklere dogru yelken acabiliyorsunuz.

MVC çatıları, uygun yerlerde kullanılırsa çok hızlı çalışırlar. Nesne tabanlı uygulamalar olması (Object Oriented Programs) sebebiyle, küresel değişkenlerin (global variables) tüm uygulamalarda taşınmasını ve böylelikle hafızanın aşırı kullanımını, veritabanı sorgularını -eğer düzgün yazılmışlarsa- çalışma hızlarını arttırırlar.

Kısacası MVC çatılarını dopru yerde uyguluyorsanız, yavaşlık değil aksine hız kazandırırlar. Bu nedenle, MVC çatılarını öğrenmekte mutlaka fayda vardır.

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

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