Anasayfa » Codeigniter, Php

Codeigniter Dersleri – 23 – Helper – Library (kütüphane)

18 Eylül 2011 5.412 kez okundu 2 yorum
1 Star2 Stars3 Stars4 Stars5 Stars (3 oy,5 üzerinden : 5,00 )
Loading...

Daha önceki derslerimizde helper ve library lerden bahsetmiştik ancak proje içinde kullanıldığı için pek fazla ayrıntıya giremedik. Bu dersimizde bu iki konuyu biraz daha açacağım ve kullanım amaçlarından bahsedeceğim. Mesela bir controller dosyanız içerisinde önemli bir fonksiyonunuz var diyelim. Bu fonksiyon bir filtre olabilir mesela, yada bir kontrol mekanizmasıdır. Siz bu fonksiyonunuzu eğer farklı controller dosyalarınız içinde kullanıyorsanız. Her seferinde o controller dosyanıza bu fonkisyonu copy-paste yapmanız gerekiyor. Bu takdir edersinizki zahmetlidir. Çünkü hem kod fazlalığına neden olur hemde koddaki herhangi bir değişikliğin tüm controller dosyalarına teker teker uygulanması zaman kaybıdır. İkinci bir seçeneğiniz  var tabiki de buda controller dosyanız içerisinden diğer controller dosyanız olan classınız tanımlayıp, ilgili classın fonksiyonunu çağırmak. Böyle yapmak ise codeigniterın mantığına terstir. Çünkü controllerın amacı belli amaca hizmet eden kod parçalarını bir araya toplamaktır. Hem böyle yapmak sistemin daha zor çalışmasına neden olur.

Peki çözüm nedir? Çözümümüz bu noktada ilgili fonksiyonunuzu bir library içerisine yazmaktır. Bir örnek verecek olursak, en basidinden filtremiz şu şekilde olsun: Fonksiyona gönderdiğimiz tarihin yıl biçiminden geçerli olup olmadığını kontrol etsin ve o an ki yaşını bize döndürsün. Bu fonksiyonu yazmak için öncelikle application/libraries altına “age_lib.php” adında bir dosya açalım ve içerisine alttaki kodları yapıştıralım

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
33
34
35
36
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
 
class Age_lib
{
	 var $CI; 
	 function Age_lib()
	 {
	 	$this->CI =& get_instance();//ana class dışından işlem yapmak için $CI =& get_instance(); satırını yazıp $CI değişkenini $this gibi kullanabiliyoruz.	
	 }
	 public function isValidAge($date=0)
	 {
	 	   	$this->CI->load->helper('date');//date helperımızı yüklüyoruz
			$datestring = "%Y";//tarihin içinden sadece yılı çekeceğiz
			$time = time();//şu anki zamanı alıyoruz
 
			$year = mdate($datestring, $time);//ve şu anki zamandan sadece yıl kısmını çekiyoruz.
			//Şimdi kullanıcı tarafından gönderilen tarihi kontrol ediyoruz.
			if($date>$year || $date<1900)
			{
				echo "Doğum tarihiniz uygun formatta değil";
				return -1;
			}
			else if(($year-$date)<18)
			{
				echo "Henüz 18 yaşına girmemişsiniz";
				return -1;	
			}
			else
			{
				return 	$year-$date;
			}
	 }
 
}
?>

Şimdi controller dosyamızdan şu şekilde çağırabiliriz;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Welcome extends CI_Controller {
 
	function __construct()
    {
         parent::__construct();
         $this->load->library('Age_lib');
	}
	public function index()
	{
 
		if($this->age_lib->isValidAge(2011)!=-1)
		{
			echo $this->age_lib->isValidAge(1990);//Dikkat bu satırda library çağırırken küçük harfle başlamalı "Age_lib" değilde "age_lib" olarak kullanılmalı   
		}   
		$this->load->view('welcome_message');
	}
}

Gördügünüz gibi istediğimiz yerden çağırabiliriz artık bu fonksiyonumuzu. İstersek direk view dosyasından çağıralım. Bunun için  view dosyamıza şunları yazmamız yeterli:

1
2
3
4
5
6
<?php
	if($this->age_lib->isValidAge(1990)!=-1)
	{
		echo "Yaşınız: ".$this->age_lib->isValidAge(1990);//Dikkat bu satırda library çağırırken küçük harfle başlamalı "Age_lib" değilde "age_lib" olarak kullanılmalı   
	}
?>...

tabiki controller dosyamızda şu şekilde olacak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Welcome extends CI_Controller {
 
	function __construct()
    {
         parent::__construct();
         $this->load->library('Age_lib');
	}
	public function index()
	{   
		$this->load->view('welcome_message');
	}
}

Peki helper lar ne işe yarıyor, helper lar da library gibi kullanılabilir ancak, helper lar direk isimleriyle çağrılırlar yani $this->helper->function() değilde direk function() olarak çağrılırlar. Şimdi yukarıda yazdığımız library i view içerisinde kullanırken gereksiz uzantılardan kurtulmak için helper yazacağız. Bunun için application/helpers altına “age_helper.php” adında bir dosya açalım ve aşağıda ki şekilde kodlayalım.

1
2
3
4
5
6
7
8
9
 
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
function validAge($date)
{
	$CI =& get_instance();  
	return 	$CI->age_lib->isValidAge($date);
} 
?>

Şimdi controller dosyamızı tekrar düzenleyelim(helper dosyamızı load etmek için);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Welcome extends CI_Controller {
 
	function __construct()
    {
         parent::__construct();
         $this->load->library('Age_lib');
		 $this->load->helper('age_helper');//helper dosyamızı load ediyoruz
	}
	public function index()
	{   
		$this->load->view('welcome_message');
	}
}

Son olarak view dosyamızdan fonksiyonumuzu çağıralım.

1
2
3
4
5
6
<?php
	if(validAge(1990)!=-1)
	{
		echo "Yaşınız: ".validAge(1990);//Dikkat bu satırda library çağırırken küçük harfle başlamalı "Age_lib" değilde "age_lib" olarak kullanılmalı   
	}
?>...

gördüğünüz gibi direk olarak validAge() şeklinde kullandık.

Burada kodları uzatmamak için fonksiyona değerleri manuel olarak yolladım. Normalde bir form yardımıyla kullanıdan alınan bir bilgi olacak. Ayrıca bu hazırladığımız helper ve library leri her seferinde controller dosyasına yüklemek istemiyorsanız config/autoload.php içerisinde helper ve library dosyalarınızın isimlerini yazabilirsiniz.

Burada view dosyasında gördüğünüz gibi fonksiyon kullanarak işlemler yaptık. İşte bu noktada php dosyalarıyla uğraşmadık ve sadece fonksiyon olan bölümler php kodu oldu. Bu da demek oluyorki tema yapımında bu şekilde fonksiyonlar kullanılıyor. Örneğin bir wordpress temasını incelerseniz böyle fonksiyonlardan ibaret olduğunu ve fazla php kodu olmadığını görürsünüz. Ve hazırladığınız bir site farklı temalara kolaylıkla taşınabilir. İyi günler.

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

2 yorum »

  • cem dedi ki:

    Gerçekten çok güzel açılamışsınız. Yeterli ve sade. Elinize sağlık.

  • Aziz dedi ki:

    Desenize helperlarla libraryleri beraber kullanmak daha faydalı, teşekkürler 🙂

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.