Yazıma başlamadan önce kendi hakkımda biraz bilgi vermek isterim. Moskova Devlet Üniversitesin’de stratejik planlama 3.sınıf öğrencisiyim. php ile lise yıllarımdan itibaren hobi iken kendimi geliştirmemle birlikte artık hobi olmaktan çıktı ve işim oldu. bu süre zarfında öğrendiklerimi düştüğüm hataları sizlerle paylaşmak istedim.Kodaman’da ki ilk yazımın CakePHP olmasını istedim. Neden diye soracak olursanız, CakePHP ile veritabanı yönetimli bir site yapmak, 0 dan (snippet kullanılmadan) bir site yapmaktan çok daha hızlıdır ve CAKEphp ile 1 site yaptığınızda bunu başka projelere uygulamak çok daha basittir.bir CMS yazdığımızı düşünelim. bunu başka projelerede çok hızlı bir şekilde dönüştürebiliriz ve zamandan büyük bir tasarruf elde ederiz.Başlangıç Soruları
Soru 1: CakePHP nedir? – cevap: bir frameworktür.Soru 2: Framework Nedir? – cevap: bir web sitesi yaparken kullanacağımız bir çok fonksiyonu önceden içinde barındıran kodlar fonksiyonlar class lar paketidir.Soru 3: Framework kullanmanın ne gibi faydaları vardır? cevap: örnek olarak mysql den bir veri çekeceğimizi varsayalım . select bilgi from bilgiler where vs vs… biz her sorgu için bu kadar kod kullanacağımıza frameworklerde bunlar hazır fonksiyonlar ile çekilir. $bilgi = query($string); gibi.CakePHP kurulumunu bir arkadasimiz anlatmis.Kodaman Anlatimiben kısaca özetliyeyim. indirdiğimiz dosyanın içindekileri www klasörümüze(veya public_html. sizin sunucu ayarlarınıza bağlı olmak üzere) açalım . cake vendors ve app klasörleri olacaklocalhost a girdiğimizde app klasörünün içeriğini görürüz ki bizim içinde lazım olan klasör budur.Şimdi Site yapmadan önce gerekli genel CakePHP bilgilerini size anlatacağım
cakephp MVC model view controller bazlı çalışır. Türkçesi Model Görünüm Kontrol elemanı diye çevrilebilinir.Model – obje modelidir. yani bir sitedeki kategoriler veya ilan bölümü bir modeldir.view – bunu bağlı olduğu modelin nasıl bir şablon ile gösterileceğini belirtir.controller – model ile ilgili fonksiyonların yazıldığı ne istenirse ne yapılacak onu kontrol eder.yukardakilerden gözünüz korkmasın yazımın ilerleyen bölümlerinde çok daha iyi anlayacaksınız
MVC nin çalışma mantığı

yukarıdaki resimde gözüktüğü gibi client yani browser diyelim. sitenin anasayfasına veya bir bölümüne girdi. dispatcher yani yönlendirici (cakephp de routes.php dosyasıdır) gerekli modelin gerekli kontrol elemanına yönlendirir. kontrol elemanı modele ne yapsın sorar gerekli bilgileri alır . view yani şablona gönderir şablon danda browserda gösterilir.En nihayet site yapımına başlayalım.
1. adım database ayarlarımız.
app/config/ içerisinde “database.php.default” isimli bir dosya bulunmakta. Bunun ismini database.php olarak değiştirin. ve kendinize gore ayarlayin.var $default = array(‘driver’ => ‘mysql’,’persistent’ => false,’host’ => ‘localhost’,’login’ => ‘mysql kullanıcı adınız yazın’,’password’ => ‘veritabanı şifresini yazın’,’database’ => ‘veritabanı ismini yazın’,’prefix’ => ”,); daha sonra app/config içindeki core.php dosyasını açıpaşağıdaki satırı bulun ve kendinize göre şifre karışımını yazın. Configure::write(‘Security.salt’, ‘kendinize gore bir şifre karışımı yazın’); bunlar hallolduktan sonra. artık veritabanımızı ayarlıyabiliriz.NOT: CAKEPHP DE MODEL ISIMLERI TEKIL bunlara baglı veritabanı tabloları ingilizce cogul olarak yazilir. mesela kategoriler ise veritabanımızdaki tablonun ismi kategorilers olarak yazılmalıdır.bu yazıyı yazarken yeni versiyonu nu cakephp ile yazacağım kongre.net sitesini örnek göstereceğim.şimdi database imiz nasıl görelim..

fark edebildiyseniz bir çok tablonun sonunda s var bu ingilizcedeki çoğul ekidir. sehir modelinin tablosu sehirs olarak veritabanında tanımlanmıştır.örnek olarak kongre modelini ele alacağız.ilk modelimizi yaratalımapp/models klasörü altına modelimiz ne ise aynı isimli bir php dosyası yaratıyoruz. benimki kongre.phpve içeriğide böyle olacakclass Kongre extends AppModel {var $name = ‘Kongre’;//The Associations below have been created with all possible keys, those that are not needed can be removedvar $belongsTo = array(‘kategori’ => array(‘className’ => ‘kategori’,’foreignKey’ => ‘catid’,’conditions’ => ”,’fields’ => array(‘id’,’name’),’order’ => ”));}

var $name = ‘Kongre’;

ile modelimizin obje ismini belirlemiş olduk.

var $belongsTo = array(

buna ilerideki bölümlerde giriş yapacağız . bu cakephp nin bir özelliğidir. modelleri birbirine bağlarsanız. mesela bir kongre bir kategori ve şehire bağlı.siz o kongre bilgilerini mysql isterken cakephp kongrenin bağlı olduğu kategori nin ve şehrin bilgilerinide otomatik olarak site çeker ve gösterir.mesela 1.kodaman kongresi:* kongre kategorisi : kodlama* kongre şehri : istanbul ( istanbul nüfus 15milyon diyelim)siz $kongre = findbyid(1) tarzında tabloda id si 1 olan kongre bilgilerini isteyince$kongre[‘kongre’][‘id’] = 1$kongre[‘kongre’][‘isim’] = 1.kodaman kongresi$kongre[‘sehir’][‘isim’] = istanbul$kongre[‘sehir’][‘nufus’] = 15milyon a atanmış olacaktır.$kongre[‘kategori’][‘isim’] = kodlama yani$degisken[‘modelismi’][‘veritabani tablosundaki sütün ismi’] tarzinda olacaktir bi 5 dk sigara molası(yasal hatırlatma . sigara sağlığa zararlıdır)
(yasal olmayan hatırlatma : nasıl olsa hepimiz bir gün öleceeezz.)
Gelelim kontrol elemanına
app/controllers klasörü altına.

kongres_controller.php

isimli bir dosya oluşturuyoruz. dosyamizin icerigi ise bu sekilde olacakKongre->recursive = 0;}function view($id = null) {if (!$id) {$this->Session->setFlash(__(‘hatali kongre.’, true));$this->redirect(array(‘action’=>’index’));}$this->set(‘kongre’, $this->Kongre->read(null, $id));}}?>

class KongresController extends AppController

fark ettiyseniz controllerin basinda Kongres şeklindedir yani database tablomuzdaki gibidir.

var $name = ‘Kongres’;function index() {$butunkongreler = $this->Kongre->find(‘all’);}

name ile kontrol elemanımıza ismini veriyoruz. bu isimler database tablosundaki isimler ile aynı olmalıdır.function index ise http://domainismi/kongres/ adresine girilince neler olacagini belirtir. ve fonksiyonumuz içindeki $butunkongreler degiskenine butun kongre bilgileri array şeklinde aktarılır.

function view($id = null) {if (!$id) {$this->redirect(array(‘action’=>’index’));}$this->set(‘kongre’, $this->Kongre->read(null, $id));}

view fonksiyonumuz ise http://domainismi/kongres/view/id konumunu belirtir ki buda en sondaki id yi rakam ile 1-2-3-4-5 gibisinden yazdığımızda kongres tablosundaki id ye göre gerekli kongre bilgilerini verecektir.sıra geldi bilgileri çektik nasıl sayfamızda göstereceğiz.
her model için view klasörü altında bir klasör açmamız gerekir.yani app/views/kongres klasörünü oluşturalım.Cakephp de şablonlar .ctp dosyasıdır ve herhangi bir fonksiyonu göstermek için aynı isimle ctp dosyası oluşturulmalıdır.bizde view.ctp dosyasını oluşturup views/kongres/view.ctp olacak şekilde kaydediyoruz ve içeriğide sizin dizaynınıza bağlı olmak üzere şu şekilde bir listeleme olabilir.

bu nedemektir? domain/kongres/view/1 i browserımıza yazdığımızdakongres tablosundaki id si 1 olan kongremizin isim sütünu, tarih sütünu ve baskabirbilgi isimli sutun bilgilerini echolayıp göstermiş oluruz.ilk bölüm burada bitiyor arkadaşlar. kafanıza takılan soru olursa aşağıdan yorum ile veya [email protected] adresinden bana ulaşabilirsiniz. mümkün olduğunca cevaplamaya çalışacağım.2. bölümde ise modeller arasındaki hasmany belongsto gibi ilişkiler. kullanıcı kayıt , email ile aktivasyon, kullanıcı girişi ve cookie ile kullanıcıları tanımayı ele alacağım.3.bölüm de de bir admin paneli nasıl cakephp ye entegre ederiz onu göstereceğim.umarım anlatabilmişimdir. sıkılmadan buraya kadar okuduğunuz için teşekkür ederim. Herkese iyi kodlamalar dilerim. thedon is out…
.