Zend Framework Başlangıç – Şablon, Veritabanı
Bir web uygulamasının genel itibari ile tüm sayfalarında logo, slogan, menü, kullanım şartları ve lisans bilgileri gibi sabit alanlar vardır. Bu sabit alanları her sayfa için tekrardan yazmamak için şablonlar kullanılır. Bu iş hiç bu kadar kolay olmamıştı.
ZF de şablon oluşturmak için application.ini dosyasına aşağıdaki satırı eklemekle başlayalım:
. .. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.layout.layout = "sablon" .. .
Bu satır ZF nin views/scripts/sablon.phtml dosyasını şablon olarak almasını sağlar.
Örnek views/scripts/sablon.phtml dosyası içeriği:
<?=$this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
echo $this->headTitle('İlk ZF Projem')->setSeparator(' - ');
echo $this->headMeta()
->appendHttpEquiv('Content-Type', "text/html; charset=utf-8")
->appendHttpEquiv('Content-Language', 'tr_TR')
->appendHttpEquiv('description', 'site ile ilgili açıklamalar')
->appendHttpEquiv('keywords', 'site ile ilgili anahtar kelimeler')
->appendHttpEquiv('author', 'Elvin Şiriyev');
//echo $this->headLink()->appendStylesheet('/css/main.css');
//css ve javascript dosyası çağırmak için View Helper'lardan ileriki konularda bahsedilecektir.
?>
</head>
<body>
<h1>Web Sitem</h1>
<?=$this->layout()->content?>
<br />
<center>© 2009</center>
</body>
</html>
Artık sitenin tüm Action’larında bu şablonu görebileceksiniz. Controller veya Action’a özel farklı şablon tanımlamalar ileriki konularda anlatılacak.
Bugünki yazımıza birkaç veritabanı işlemi ile devam edelim. İlk yapmamız gereken veritabanı bağlantısını oluşturmak. Bunun için gereken tek şey aşağıdaki satırları application.ini dosyasına (örneğin az önce eklediğimiz satırın hemen altına) eklemek olacak:
resources.db.adapter = "MYSQLI" resources.db.params.hostname = "localhost" resources.db.params.username = "root" resources.db.params.password = "123456" resources.db.params.dbname = "veritabaniadi" resources.db.params.charset = "utf8" resources.db.isDefaultTableAdapter = true
Bağlantı bilgilerini kendi bağlantınıza göre ayarlamayı ihmal etmeyin.
Evet, veri tabanı bağlantımız gerçekleşmiş oldu. Çok kolay, değil mi ?
Veritabanımızda user tablosu ve bu tablonun id, username ve password alanları olduğunu varsayarak devam edelim. ZF de her tabloyu bir nesne gibi ele almak, insert, update, delete gibi işlemleri en pratik şekilde yapmak için bir güzellik de Zend_Db_Table nesnesidir. Bu nesneden faydalanmak için bir önceki konuda library içerisinde oluşturduğumuz App dizin yapısını en güzel şekilde kullanacağız. İlk yapmamız gereken library/App/DbTable dizini içerisine User.php adında dosya oluşturmak ve aşağıdaki içeriği eklemek:
library/App/DbTable/User.php dosya içeriği:
<?php
class App_DbTable_User extends Zend_Db_Table
{ // uygulama içerisinde new App_DbTable_User() denildiği zaman
// ZF bu nesne için App/DbTable/User.php dosyasına bakar.
protected $_name = 'user';
// tablo ismi
protected $_primary = 'id';
// tablo birincil alan ismi
}
AutoLoad’ın nimetlerinden faydalanmak için bir adımımız daha var. Bu da aşağıdaki satrı application.ini dosyasının ikinci satrında yer açarak eklemekten ibaret:
autoloadernamespaces[] = App
Bu satır new App_DbTable_User() denilince App/DbTable dizininde User.php dosyasını çağırmak içindir.
Devamında herhangi bir action’a (örneğin IndexController’ın indexAction fonksiyonuna) aşağıdaki satırları ilave edip çalıştıralım:
public function indexAction(){
$user = new App_DbTable_User();
$user->insert(array(
'id' => 1,
'username' => 'ali',
'password' => 'alininşifresi'
));
}
phpmyadmin gibi bir aracımız varsa ve herşey yolunda gitmişse artık tablomuzda yeni bir satır var demektir. Değerleri değiştirip birkaç satır daha kaydetmenizde sıkıntı olmayacağı için bu nesnelerle oynamak serbest. Ama bir arkadaşımın yaptığı gibi Zend dizini içerisinde dosya değiştirmek hiç mantıklı değil. Sistemde açıklara neden olabileceğiniz için bundan kaçının.
Sıra veritabanında bulunan bilgileri ekrana yazdırmaya geldi. Bunun için önceki konuların yardımıyla User Controller ve list Action oluşturalım.
UserController.php içeriği
<?php
class UserController extends Zend_Controller_Action
{
public function listAction()
{
$user = new App_DbTable_User();
$this->view->users = $user->fetchAll();
}
}
views/scripts/user/list.phtml dosya içeriği
<table> <tr> <th>ID</th> <th>Kullanıcı Adı</th> <th>Şifre</th> </tr> <?php foreach($this->users as $user) : ?> <tr> <td><?=$user->id?></td> <td><?=$user->username?></td> <td><?=$user->password?></td> </tr> <?php endforeach; ?> </table>
http://example.com/user/list sayfasını çalıştırdığımızda tabloya eklediğimiz verileri görebiliyorsak sıra beni ve kendinizi tebrik etmede. Bir sonraki konumuza Zend_Form ve güzelliklerinden bahsedeceğiz. Yorum ve eleştirilerinize her zaman açık olduğumu bildirerek bu konuyu da kapatalım.

Qardash, bu Zendi ishletmeye chalishdim bir ara, ama sonra gordum ki bunun istifade “dilini” oyrenince teze bir programming dili oyrenmek olar.
Ona gore de ozum yighiram projeleri sifirdan. sadece hazir klasslardan istifade etmek de ishe yarayir(esasen AJAX ishlemlerde, phpclasses.org faydalidir.)