CakePHP kurulumu daha önceden yazılmıştı. Şimdi de basit bir ziyaretçi defteri yapacağız. Öncelikle verilen saklanacağı bir veritabanı oluşturmak için phpmyadmin sayfasına girip defter isminde bir veritabanı oluşturuyoruz. CakePHP’nin dosyalarının bulunduğu dizine cakeyol diyelim. Burası localhost içinde defter isminde bir dizin olsun. Şimdi de cakeyol/app/config/database.php.default dosyasının adını database.php olarak değiştirdikten sonra dosyayı açıp default ayarlar bölümüne mysql kullanıcı adımızı (herhangi bir kullanıcı adı belirtmediyseniz kullanıcı adımız root olacaktor), parolamızı (parola belirtmediyseniz boş bırakın) ve kullanacağımız veritabanı ismini (defter) yazıyoruz.var $default = array(‘driver’ => ‘mysql’,’persistent’ => false,’host’ => ‘localhost’,’login’ => ‘root’,’password’ => ”,’database’ => ‘defter’,’prefix’ => ”,); Şimdi http://localhost/defter yazdığımızda karşımıza CakePHP varsayılan sayfası gelecek. Bizden güvenlik için cakeyol/app/config/core.php dosyasındaki Security.salt değerini değiştirmemizi isteyen bir uyarı çıkacak. Bu değeri değiştirdikten sonra bu uyarı kaybolur. Bu sayfada bunun haricinde dört bilgilendirme daha vardır. Bunlar:* Your tmp directory is writable.* The FileEngine is being used for caching. To change the config edit APP/config/core.php* Your database configuration file is present.* Cake is able to connect to the database.Bu dört uyarı herşey herşey yolunda demektir.Tablo Oluşturma
Veritabanını oluşturduktan sonra defter ismindeki veritabanının içine posts isminde bir tablo oluşturalım. Bunun için şu sorguyu çalıştıralım:
CREATE TABLE `defter`.`posts` (`id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,`created` DATETIME NOT NULL ,`title` VARCHAR( 128 ) NOT NULL ,`body` TEXT NOT NULL ,`user` VARCHAR( 32 ) NOT NULL) ENGINE = MYISAM
Tablomuzu oluşturduk. Tablomuzda 5 eleman var. Bunlardan id her yazının kimlik numarasıdır, created oluşturulma tarihi, title başlığı, body yazını içeriği, user ise yazıyı yazanın adıdır. Bunları istediğimiz kadar arttırabiliriz. Tablodaki bu isimleri ingilizce seçmemizin nedeni ise CakePHP’nin bazı ilişkilendirmelerinde ingilizce gramer kullanmasıdır. Mesel tablo ismi model isminin çoğuludur. Yani tablo ismi posts ise model ismi post olmalıdır ya da tablo ismi children ise model ismi child olmalıdır. Buna benzer bir kaç kural daha var onları da gerektiğinde kullanacağız.Model oluşturma
cakeyol/app/models dizini içine post.php isminde bir dosya oluşturuyoruz -tablomuz verdiğimiz ismin tekil hali- ve içeriğini de şöyle yapıyoruz:class Post extends AppModel {var $name=’Post’} Şu an içinde modelimizde isimden başka belirteceğimiz birşey yok. $name değişkenine atadığımız ‘Post’ değerinin başharfinin büyük olmasına dikkat edin.
Controller Oluşturma
cakeyol/app/controllers dizinin içine yazilar_controller.php isminde bir dosya oluşturuyoruz ve içeriğini de şöyle yapıyoruz:class YazilarController extends AppController{var $name=’Posts’;function index(){$this->set(‘tum_yazilar’,$this->Post->findAll());}} Burada tanımladığımız sınıfın ismi ile controller dosyasının ismiyle aynı olup başharfi büyük olmalı, _ karakterleri kaldırılmalı ve _ karakterinden sonra gelen ilk harf büyük olmalı. (yazilar_controller.php -> YazilarController, kullanicilar_controller.php -> KullaniciController ). Sayfa isimleride controller adı/fonksiyon adı şeklinde oluyor. Yani yazilar_controller.php dosyasının içine yazdığımız bir fonksiyon – index() fonksiyonu – www.sitem.com/yazilar/index adresindeki olaydır.
View Oluşturma
Controller dosyasında yazdığımız her fonksiyon için bir view dosyası tanımlamamız lazım. cakeyol/app/views dizini içine posts isminde bir dizin oluşturup içine fonksiyonun adi+*.ctp şeklinde bir dosya oluşturuyoruz. index fonksiyonunun viewini yazdığımız için index.ctp isminde bir dosya oluşturuyoruz ve içine şunları yazıyoruz: “.$p[‘Post’][‘title’].”

“;
echo “yazan: “.$p[‘Post’][‘user’].”“;
echo “

“.$p[‘Post’][‘body’].”

“;
endforeach;?> Controller dosyasında $this->set(‘tum_yazilar’,$this->Post->findAll()); satırıyla /yazilar/index sayfasına tum_yazilar isminde bir dizi gönderiyoruz. Bu dizini içeriğinde ise veritabanından çektiği Post modelimize ait tüm veriler bulunmaktadır. View sayfasında da bir foreach döngüsüyle $p değişkenine sırayla veritabanından çektiği tablo değerlerini atıyoruz ve sayfaya yazdırıyoruz. Artık verileri veritabanından okuyabiliyoruz. Şimdi de veritabanına bilgi girişi yapalım. Bunun için control dosyamıza bir fonksiyon daha ekleyelim. function ekle(){if (!empty($this->data)){if ($this->Post->save($this->data)){$this->flash(‘Yazınız Eklendi’,’/yazilar/index’);}}} İlk fonksiyonda ziyaretçi defterindeki yazıları okuyorduk. Burada ise ziyaretçi defterine yazı ekliyoruz. $this->data‘nın içeriği ise sayfada kullanıcın girdiği verilerdir. Bu fonksiyonda ise $this->Post->save($this->data)) satırıyla veritabanına bilgi girişi yapıyoruz. $this->flash() komutunun ikinci parametresi ise – /yazilar/index – yazıyı ekledikten sonra yönlendirilecek olan sayfasını belirtir. Ekleme sayfasının view’i ise cakeyol/views/posts/ekle.ctp olacaktır ve içeriği de şöyle olacaktır: create(‘Post’,array(‘url’=>’/yazilar/ekle’));echo $form->input(‘user’);echo $form->input(‘title’);echo $form->input(‘body’);echo $form->end(‘Kaydet’);?> Burada form oluşturmak için CakePHP’nin $form helperıni kullanıyoruz. $form->create() satırında parametre olarak modelimizin adı ve ekleme yaptığımız sayfanın adresini giriyoruz.$form->input() satırlarında ise tabloda belirttiğimiz alanları giriyoruz. “user” alanını özelliğini VARCHAR olarak belirttiğmiz için sayfada otomatik olarak şeklinde görülüyor veya “body” alanını TEXT olarak belirttiğimiz için sayfada olarak görülüyor. $form->end() satırında ise Gönder butonunu oluşturuyoruz. index sayfasına yazı ekleme sayfasının linkini koyduktan sonra ziyaretçi defterimiz bitmiş olacak; echo $html->link(‘Yazı ekle’,’/yazilar/ekle’); Bu satırı index.ctp dosyasının sonuna ekliyoruz.Ziyaretçi defterimizi oluşturmuş bulunuyoruz. Eğer stilleri değiştirmek isterseniz cakeyol/app/webroot/css/cake.generic.css dosyasını düzenleyebilirsiniz.