Bir süredir öylesine bakındığım bir php framework var adı Codeigniter. Türkçe olarak çatı anlamına gelmektedir. Hazır kütüphane topluluğu gibi düşünebiliriz. MVC ( model – view – controller ) yapısı ile de kullanımı ve öğrenmesi fazla zaman almıyor. Frameworkleri illa kullanmak zorunda mıyız gibi bir soru gelebilir aklınıza aslında bu tamamen kişisel bir düşüncedir bana göre. Kimi kesim evet kesinlikle kullanmak gerekli derken kimi kesim de ne gerek var diyip inline kod yazmaya devam etmektedirler. Benim fikrim ise yerine göre kullanılmalıdır. Büyük projelerde kullanmak faydalı olacaktır ve projelerinizi hızlı esnek ve güvenilir bir şekilde yazılmasını sağlayacaktır.

Tutup da bir ziyaretçi defteri için framework kullanmanın anlamı her ne kadar yok desem de bu yazı da ne yazıkki ziyaretçi defteri yapımını anlatacağım. Aslında bu örnek codeigniter da nasıl veri alınır kontrol edilir kaydedilir ve gösterilir üzerine basit ve sade bir örnek.  MVC linkini umarım açıp okumuşsunuz eğer okumadıysanız kısaca bende bahsetmek istiyorum.

M (model) V  (view) C (controller) = MVC

Peki nedir bu model view ve controller ?

Model verilerin işlendiği kısımdır. Yani controllerden gelen istekler doğrultusunda iş yapar. Örneğin formdan gelen bir veriyi veritabanına işler veya çağırı.

View kısmı ise sadece controller tarafından kendisine sunulan verileri ziyaretçiye göstermekle yükümlüdür.

Controller ise view ve model arasında köprü kurmuş vaziyettedir. View den gelen bilgileri alır işler ve model veya tekrar view e sunar ya da sadece model e sunup model den dönen bilgiye göre tekrar view e geri döner.

Yani kısaca;

resimdeki gibidir mvc.

Lafı daha fazla uzatmadan verilerimizi işleyeceğimiz controller dosyamızı yazalım:

< ?php
 
class Zd extends Controller
{
	private $sorgu;
	private $satir;
	private $islem;
	private $data = array();
 
	public function __construct()
	{
		parent::Controller();
 
		$this->load->model('defter');
	}
 
	public function index()
	{
		$this->data = $this->sayfalama();
 
		$this->load->view('zd',$this->data);	
	}
 
	public function mesajEkle()
	{
		// Form Kontrol
		$this->form_validation->set_rules('ad_soyad','Ad ve Soyad','required');
		$this->form_validation->set_rules('mesaj','Mesaj','required');
 
		if ($this->form_validation->run() == FALSE)
		{
			$this->data = $this->sayfalama();
 
			$this->load->view('zd',$this->data);
		}
		else
		{
			$this->islem = $this->defter->mesajEkle(
				array(
					'ad_soyad' => strip_tags($this->input->post('ad_soyad')),
					'email' => strip_tags($this->input->post('email')),
					'web' => strip_tags($this->input->post('web')),
					'mesaj' => $this->input->post('mesaj'),
					'ip' => $_SERVER['REMOTE_ADDR'],
					'tarih' => time()
				)
			);
 
			if ($this->islem == TRUE)
			{
				redirect(site_url());
			}
			else
			{
				$data['hataMesaji'] = 'Mesaj Eklenemedi. Yeniden Deneyiniz.';
				$this->load->view('zd',$data);
			}
		}
	}
 
	private function sayfalama()
	{
		if (isset($_GET['sayfa'])) $sayfa = intval($_GET['sayfa']); else $sayfa = 0;
 
		$config['base_url'] = "?";
		$config['query_string_segment'] = "sayfa";
		$config['total_rows'] = $this->defter->toplamKayitSayisi();
		$config['per_page'] = 5;
		$this->data['mesajlar'] = $this->defter->mesajGetir($sayfa);
		$this->pagination->initialize($config);
		$this->data['sayfa'] = $this->pagination->create_links();
 
		return $this->data;		
	}
}
?>

Şimdi ise model dosyamızı yazalım:

< ?php
 
class Defter extends Model
{
	private $query;
	private $rows;
 
	public function __construct()
	{
		parent::Model();
	}
 
	public function mesajEkle($o)
	{
		return $this->db->insert('defter',$o);
	}
 
	public function tumMesajlar()
	{
		return $this->db->get('defter');
	}
 
	public function toplamKayitSayisi()
	{
		$this->query = $this->db->get('defter');
		$this->rows = $this->query->num_rows();
		return $this->rows;
	}
 
	public function mesajGetir($sayfa)
	{
		return $this->query = $this->db->query("
			SELECT * FROM defter ORDER BY id DESC LIMIT ".$sayfa.",5
		");
	}
}
?>

Son olarak view dosyamızı yazalım:

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="tr" lang="tr">
 
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="Raiden" />
 
<title>Ziyaretçi Defteri v1.0 - http://ysfkc.com</title>
<link href="<?=site_url('css/reset.css')?>" rel="stylesheet" type="text/css" />
</link><link href="<?=site_url('css/style.css')?>" rel="stylesheet" type="text/css" />
</link><link href="<?=site_url('css/jquery.wysiwyg.css')?>" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<?=site_url('js/jquery.js')?>"></script>
<script type="text/javascript" src="<?=site_url('js/jquery.wysiwyg.js')?>"></script>
<script type="text/javascript">
$(document).ready(function()
{
    $('#mesaj').wysiwyg();
});
</script>
</link></head>
 
<body>
 
<div class="govde">
	< ?php foreach ($mesajlar->result_array() AS $rows): ?>
	<div class="ziyaretci_alani">
		<p class="belirtec">< ?=$rows['ad_soyad']?></p>
		<div class="ziyaretci_mesaji">
			< ?=$rows['mesaj']?>		
		</div>			
	</div>
	< ?php endforeach; ?>
 
	<div class="sayfalama_alani">
	Sayfalar: < ?php echo $sayfa; ?> 		
	</div>
 
	< ?php if (isset($hataMesaji)): ?>
	<div class="ikaz">< ?=$hataMesaji?></div>
	< ?php endif; ?>
 
	<div class="form_alani">
		< ?php echo form_open('mesajEkle'); ?>
			<label>Ad Soyad: < ?php echo form_error('ad_soyad'); ?></label> <br />
			<input type="text" name="ad_soyad" /> <br /> <br />
			<label>E-mail:</label> <br />
			<input type="text" name="email" /> <br /> <br />
			<label>Web:</label> <br />
			<input type="text" name="web" /> <br /> <br />
			<label>Mesajınız: < ?php echo form_error('mesaj'); ?></label> <br />
			<textarea id="mesaj" name="mesaj" rows="11" cols="69" ></textarea> <br /> <br />
			<input type="submit" name="submit" value="Ekle" />
 
	</div>
 
	<div class="footer">
		Copyright &copy; <a href="http://www.ysfkc.com" target="_blank">ysfkc.com</a> Ziyaretçi Defteri v1.0 Alt Yapı <a href="http://www.codeigniter.com" target="_blank">CodeIgniter</a> <a href="<?=site_url('proje/zd.tar.gz')?>">Download</a>
	</div>
</div>
 
</body>
</html>

Controller dosyamızda neler yapmışız bir bakalım;
Yapılandırıcı metodumuz da ( __construct ) uygulamamızda kullanacağımız modeli bir defaya mahsus yüklüyoruz. Bu uygulamadaki modelimizin adı defterdir. İndex metodumuzda ise sayfalama metotundan dönen bilgileri alıp view dosyamıza veri aktarımını sağlıyoruz.

mesajEkle metodumuzda ise öncelikle formdan gelen verilerden hangilerinin kontrol edileceğini form validation kütüphanesini kullanarak belirtiyoruz ve ardından validation işleminin doğru veya yanlış olma koşulunu kontrol ediyoruz. Eğer koşul yanlış dönerse view dosyası yeniden çağrılıyor eğer dönmez ise modelimizdeki mesaj kayıt metoduna uygun bir şekilde aktarılıyor ve ardından bu işlemin true ya da false değerine göre işlem yapılıyor.

sayfalama metodumuzda ise yine ci ye ait olan pagenition kütüphanesinden yararlanılarak model alınan tüm mesajlar sayfalama yapılmak üzere hazırlanıyor.

Model dosyamızda neler yapmışız bir bakalım;
Model dosyamızda ise controllerden bize gelecek verilere göre sql sorguları yapıp yine contoller dosyamıza bilgi dönüşü yaptırmışız.

Views dosyamızda neler yapmışız bir bakalım;
Bu dosyada ise artık gerekli işlemlerin yapılarak views in kullanıcılara sunacağı verileri aktarılmış ve views de bunları alıp işleyerek uygun bir formatta kullanıcıya göstermiştir.

Örneğimizin çalışması için veritabanı bağlantısını system/application/config/database.php den yapabilirsiniz.

Son olarak codeigniter user manualine buradan bakabilirsiniz.

Örneğimize buradan bakabilir ve buradan indirebilirsiniz.