CakePHP 2.x. Burak USGURLU burak@uskur.com.tr. Linux Yaz Kampı 2012-23 Haziran - 8 Temmuz - Bolu İzzet Baysal Üniversitesi



Benzer belgeler
Aktarımı Çalıştırmak/Geri Almak 146 Alan Seçenekleri 148 Veri Tabanı Şeması 150 Veri Tabanı ile İlgili Bazı Rake Görevleri 162 Modeller 164

MOBİL UYGULAMA GELİŞTİRME

Rails İle Ağ Uygulamaları Geliştirimi

Bölüm 10: PHP ile Veritabanı Uygulamaları

Sunum Planı. Django Nedir? Django projesi oluşturmak Basit bir blog uygulaması. Şablon Kullanımı Diğer özellikleri

CODEIGNITER SEMINERI KÜTÜPHANE YAZMA GÜVENLIK ÖNLEMLERI CODEIGNITER 2.0

PHP CodeIgniter MVC Framework

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Ara Öğr. Gör. Murat KEÇECĠOĞLU

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

Öğr. Gör. Serkan AKSU 1

Client Server Database

1 Temel Kavramlar. Veritabanı 1

4. Bağlantı (Köprü) Oluşturma

PHP 1. Hafta 2.Sunum

İnternet Programcılığı

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Üst Düzey Programlama

1. Hafta MS SQL Server 2008 Kurulum ve Tanıtımı BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: Kurulum:

1.PROGRAMLAMAYA GİRİŞ

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Veritabanı. Ders 2 VERİTABANI

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

Java EE web uygulamaları geliştirmek için kullanılan açık kaynak web uygulama framework üdür.

3. Hafta Tablo İşlemleri BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: 1. Tablo İşlemleri Kısıtlamalar (Constraints)

SQL Komutları (2) Uzm. Murat YAZICI

Veritabanı. SQL (Structured Query Language)

Bölüm 4: DDL Veri Tanımlama Dili

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Web Uygulamaları Mimarileri ve Güvenliği

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

Veritabanı Tasarımı. NOT NULL ve UNIQUE Kısıtlamaları Tanımlama

2-Hafta Temel İşlemler

PERKON PDKS Kurulum ve hızlı başlangıç rehberi

Kurulum ve Başlangıç Kılavuzu. DataPage için

Tavsiye Edilen Önhazırlık Temel SQL Server 2000 bilgisi edinmek.

Veritabanı Yönetimi Bilgisayarların. Keşfi Hedefler. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi. Veritabanı, Veri ve Bilgi

Programlama Yazılımı ile Web Sitesi Oluşturma

Mikro Ayarları. Mikro Programının kurulu olduğu veritabanı ve web servisi için bağlantı ayarlarının yapıldığı menüdür.

Kurulum ve Başlangıç Kılavuzu. DataPage için

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Veri Tabanı-I 1.Hafta

KANTAR UYGULAMASI Kurulum Kılavuzu

Üst Düzey Programlama

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Php İle Mysql Veritabanından Bilgi Çekme

JavaServerFaces. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

State Yönetimi. Bir web sayfası ile sunucu arasındaki etkileşim ;

SORGULAR VE ÇEŞİTLERİ II

TC KİMLİK NO SMS GÖNDERİM XML API

Bilgisayar Uygulamaları. MySql

İNTERNET PROGRAMCILIĞI - II

WEB KULLANICI KONTROLLERİ ve ANASAYFA KULLANMA(Master Page)

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

PAPERWORK TEKNİK MİMARİ

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

SORGULAR. Öğr.Gör.Volkan Altıntaş

Bimel Ürün Veritabanı Paylaşım Platformu. XML Servisleri

Veri Tabanı Tasarım ve Yönetimi

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Ruby On Rails. Hüseyin Gömleksizoğlu

Üst Düzey Programlama

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

VERİTABANI Veritabanı Yönetimi

TC KİMLİK NO SMS GÖNDERİM SOAP API

Sun Solaris Jumpstart Sistemi

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

PHP 1. Hafta 1. Sunum

Web Uygulama Güvenliği Kontrol Listesi 2010

VERİ TABANI YÖNETİM SİSTEMLERİ-II

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Swing ve JDBC ile Database Erişimi

Basit bir web uygulaması

Üst Düzey Programlama

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

PHP ile İnternet Programlama

DESTEK DOKÜMANI. Ürün : Tiger Enterprise/ Tiger Plus/ Go Plus/Go Bölüm : Kurulum İşlemleri

ASP.NET 1. DURUM YÖNETİMİ. BLM 318 e-ticaret ve Uyg. Durum Yönetimi Nedir? Durum Yönetimi: Karșılaștırma İÇERİK. Sunucu-taraflı Durum Yönetimi

Güvenlik Java ve Web Uygulama Güvenliği

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

WEB E-POSTA AYARLARI. Outlook 2003 Ayarı ( Resimli Anlatım )

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 2

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 4 MasterPage

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

MOBIL UYGULAMA GELIŞTIRME

J-Guar Self Servis Kurulumu

Veritabanı Tasarımı. Tablo Oluşturma

Özgür Yazılımlarla Web Programlama. Özlem Özgöbek

1 Temel Kavramlar. Veritabanı 1

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Veri Tabanı Yönetim Sistemleri Bölüm - 02

Üst Düzey Programlama

DIV KAVRAMI <style> position: absolute

1.1 Web Kavramlar URL terimini tanımlayınız ve anlayınız.

VERİ TABANI YÖNETİM SİSTEMLERİ I

2-Veritabanı Yönetim Sistemleri/ Temel Kavramlar

Transkript:

CakePHP 2.x Burak USGURLU burak@uskur.com.tr

Tanışalım... Burak USGURLU 348 no'lu üye. 2007 Başkent Üniversitesi, Bilgisayar Mühendisliği 2010 ODTÜ, Yazılım Yönetimi Şu anda Uskur Yazılım'da

Tanışalım... Sizler? CakePHP duyanlar/ile geliştirenler? Diğer PHP çerçevelerini (framework) kullananlar? PHP olmayan çerçeve kullananlar? Üye yazılımı çalışmalarını duymuş olanlar?

Önümüzdeki 7 Gün 2012-07-01 CakePHP kuralları, bileşenleri (model, view, controller, behaviour, component, helper,...) 2012-07-02 Uygulama Geliştirme: Uygulamaya genel bakı ş, veritabanının tasarımı, temel SVN kullanımı, i ş paketleri. 2012-07-03 Üye Yazılımı Uygulama Geliştirme 2012-07-04 Üye Yazılımı Uygulama Geliştirme 2012-07-05 Üye Yazılımı Uygulama Geliştirme 2012-07-06 Üye Yazılımı Uygulama Geliştirme 2012-07-07 Üye Yazılımı Uygulama Geliştirme 2012-07-08 Ayrılış

7 Gün Sonunda... Amacımız: CakePHP kullanarak uygulama geliştirebiliyor olmanız. Çalışan bir üye yazılımımızın olması.

Eğitim Akışı CakePHP Nedir? Neden? İyi ve Kötü Yanları CakePHP Kaynakları Model-View-Controller (MVC) CakePHP ile İstek Karşılama Cake: İçindekiler CakePHP Kuralları Denetçi (Controller) Bileşen (Component) Model Davranış (Behaviour) Görünüm (View) CakePHP Komut Satırı CakePHP'nin Gereksinimleri CakePHP Kuralım

CakePHP Nedir? CakePHP, PHP için özgür ve açık kaynaklı (MIT) uygulama geliştirme çerçevesidir (framework). Cake'in Ruby on Rails'ı örnek aldığı sıkça telafuz edilmektedir. Symphony, CodeIgniter, Zend, Prado diğer PHP çerçevelerine örneklerdir. Programcılar için web uygulamaları geliştirmek için temel bir yapıdır. Size, uygulama geliştiriken esas yapmanız gereken kodlamayı, yani uygulamanıza özel mantığı kodlamaya başlamak için ihtiyacınız olan tüm araçları sunar.

Neden? İyi ve Kötü Yanları İyi Kötü Hızlı geliştirilebilme Performans Güvenliğiniz Güvenliğiniz başkalarının başkalarının elinde elinde Tekerleği tekrar icat Hatalardan etkilenirsiniz etmeniz gerekmiyor Yazılımınızı Kodunuz belli bir güncellemeniz standarda uyuyor gerekebilir

CakePHP Kaynakları http://cakephp.org - Cake'in Anasayfası http://book.cakephp.org - Cake'in Yemek Kitabı (Kılavuzu) http://api.cakephp.org - Cake'in API'si http://bakery.cakephp.org - Fırın, CakePHP üzerine paylaşım alanı http://groups.google.com/group/cake-php - Topluluğun yardım ve paylaşım alanı irc://irc.freenode.net #cakephp Anında destek için IRC kanalı

Sürümler İlk geliştirilmesine 2005 yılında başlandı. 1, 1.1 ve 1.2 sürümlerinin ardından... 1.3 sürümü 24 Nisan 2010 2.0 sürümü 16 Ekim 2011 2.1 sürümü 4 Mart 2012 2.2RC2 sürümü 19 Haziran 2012 1.x sürümleri arasında geçiş API'de gerçekleşen değişiklikler nedeniyle zorluydu. 2.x sürümleri arasında geçiş API'da değişiklikler olmadığı için nerdeyse sorunsuz. Biz 2.2RC2'yi takip ediyor olacağız.

CakePHP 2.x Gereksinimleri HTTP Sunucusu. mod_rewrite özelliği açık bir Apache sunucusu tercih edilir, ancak zorunlu değildir. PHP 5.2.8 veya daha yeni bir sürümü. Teknik olarak bir veritabanına ihtiyacınız yok ancak aşağıdakilerden herhangi birisini kullanabilirsiniz... MySQL (4 veya daha yenisi), PostgreSQL, Firebird DB2, Microsoft SQL Server, SQLite,...

Model-View-Controller (MVC) Model-Görünüm-Denetçi (MGD) Bir yazılım tasarım desenidir ve CakePHP bu deseni temel alır. Amaç iş mantığı ile uygulamanın çıktısını birbirinden ayırmaktır. Böylece bir katmanda oluşacak bir değişiklikten diğer katmandaki kodun etkilenmesi en aza indirilmiş olur.

Model-View-Controller (MVC) Model kısmı uygulama verisini temsil eder Görünüm (View) kısmı model verisinin sunuşunu oluşturur Denetçi (Controller) istemciden gelen istekleri ele alır ve yönlendirir

CakePHP ile İstek Karşılama

Cake: İçindekiler CakePHP Denetçi (Controller), Model ve Görünüm (View) sınıflarına yer verir. Ayrıca Bileşenler (Components), Davranışlar (Behaviors) ve Yardımcı (Helpers) sınıfları ile genişleme ve tekrar kullanma olanakları sunar. app: Bizim uygulamamız. lib: CakePHP kütüphanesi barınır. vendors: Harici sınıflar ve kütüphaneler app Config Controller Lib Locale Model Plugin tmp Vendor View webroot lib vendors plugins.htaccess index.php README

CakePHP Kuralları Dosya, sınıf, tablo gibi unsurları isimlendirme kuralları var. Sadece kurallara uyarak başka bir çaba harcamadan uygulamanıza özellik kazandırabilirsiniz. Kuralların kullanımı ayrı bir tanım dosyası tutma ihtiyacı ortadan kaldırmakta, ortak bir dil oluşturarak farklı geliştiricilerin uygulamayı kolayca anlamasını sağlamaktadır.

Kurallar: İsimlendirme Sınıf Türü Controller (Denetçi) Bileşen (Component) Sınıf İsmi KucaklasmaVeOpucuklerController BenimKullanisliComponent Dosya İsmi KucaklasmaVeOpucuklerController.php BenimKullanisliComponent.php Model SecenekDegeri SecenekDegeri.php Davranı ş (Behavior) Görünüm (View) Yardımcı (Helper) CokEsnekBehavior AcayipBasitView SimdiyeKadarkiEnIyiHelper CokEsnekBehavior.php AcayipBasitView.php SimdiyeKadarkiEnIyiHelper.php Aslında oldukça basit: (model hariç) sınıf ismi DeveSirti[SınıfTürü] biçiminde dosya isminde sınıf isminin sonunda.php var.

Kurallar: Model ve Veritabanı Model sınıf isimleri İngilizce, tekil ve DeveSirti biçiminde olmalıdır. Person, BigPerson, ReallyBigPerson gibi. Modellerle ilişkili tablo isimleri İngilizce, çoğul ve alttan çizgili olmalıdır. Örneğin people, big_people, really_big_people gibi. hasmany, belongsto veya hasone ilişkilerindeki yabancı anahtarlar (foreign keys) ön tanımlı olarak ilişkili olduğu modelin (tekil) ismine _id eklenmesi ile tanımlanır. baker hasmany cakes ilişkisinde cakes tablosunda baker_id yabancı anahtar olmalıdır. hasandbelongstomany (HABTM) ilişkilerinde, birleşim modeli birleştirdiği modellerin isimlerinin alfabetik sırayla eklenmesi ile isimlendirilmelidir. Tüm tablolarda her satırı tanımlamak için tekil bir birincil anahtar (primary key) bulunmalıdır.

Örnek: Model ve Veritabanı İsim Model: Baker Tablo: bakers İlişki: Baker hasmany Cakes <=> Cake belongsto Baker Yabancı Anahtar (Foreign Key): bakers -> baker_id

Kurallar: Denetçi Denetçi sınıf isimleri İngilizce, çoğul ve DeveSirti biçiminde olmalıdır. İsmin sonuna Controller eki eklenmelidir. PeopleController, BigPeopleController, ReallyBigPeopleController gibi. URL'de denetçiler alttan çizgili biçimde controller yazılmadan çağırılır. people, big_people gibi. Bir denetçide oluşturulması beklenen ilk eylem index()'dir. Öntanımlı olarak http://example.com/apples cağırıldığında apples denetçisinin index() eylemi çağırılacaktır.

Kurallar: Örnek Kurallara uyulduğunda http://example.com/people/ isteği için... Veritabanı tablosu: "people" Model sınıfı: "Person" Konumu: /app/models/person.php Denetçi Sınıfı: "PeopleController" Konumu: /app/controllers/peoplecontroller.php Denetçi Eylemi: index() Görünüm: /app/views/people/index.ctp

Kurallar: Örnek 2 Kurallara uyulduğunda http://example.com/books/view/12 isteğinde... Veritabanı tablosu: "books" Model sınıfı: "Books" Konumu: /app/models/books.php Denetçi Sınıfı: "BooksController" Konumu: /app/controllers/bookscontroller.php Denetçi Eylemi: view($id = null), parametre olarak $id=12 atanır. Görünüm: /app/views/books/view.ctp

Denetçi (Controller) Denetçi (controller) uygulama mantığını yönetmek için kullanılmaktadır. Genelde herbir denetçi tek bir model ile ilişkidedir. RecipesController -> Recipe (model) İçlerinde Eylem (Action) olarak isimlendirilen metodlar barındırırlar. Gelen isteğe göre ilgili Eylem çalıştırılır ve mantığın sonucu ilgili Görünüme (View) iletilir. RecipesController->AppController->Controller sınıfından türetilir.

Denetçi Geri Çağrıları (Callback) Denetçilerde Geri Çağrılar (callback) bulunmaktadır. Geri Çağrılar vasıtasıyla CakePHP'nin çekirdek akışının içersine mantık gömebilirsiniz. Denetçi'de kullanılabilen geri çağrılar: beforefilter() çağrısı denetçideki herhangi bir eylemden önce çalıştırılır beforerender() çağrısı denetçideki eylem bittikten sonra görünüm oluşturulmadan önce çalıştırılır afterfilter() çağrısı denetçideki eylem bittikten ve görünüm oluşturulduktan sonra çalıştırılır.

Örnek Denetçi (Controller) 1. <?php 2. App::uses('AppController', 'Controller'); 3. # /app/controllers/recipescontroller.php 4. class RecipesController extends AppController { 5. public function view($id) { 6. //eylem mantığı buraya.. 7. } 8. public function share($customer_id, $recipe_id) { 9. //eylem mantığı buraya.. 10. } 11. public function search($query) { 12. //eylem mantığı buraya.. 13. } 14. } 15.?>

Bileşen (Component) Farklı denetçiler arasında mantığı paylaşmaya olanak sağlayan paketlerdir. Her denetçide ihtiyaç duyulan ortak özellikler bir bileşen paketi haline getirilebilir. CakePHP'de hazır gelen bazı bileşenler: Sessions Kullanıcı oturumlarını yönetmek. Oturumda bilgi saklamak, bilgi okumak. Cookies Kullanıcıda saklanan çerezleri yönetmek için metodlar içerir. Authentication Kullanıcı kimliği doğrulama ve doğrulanmış kimlik oturumu açmak için kullanılır. Request Handling İstemciden gelen farklı taleplerin neler olduğunu bulmak için kullanılır. (http, json, RSS, vb.)

Örnek: Pagination PaginationComponent sayfa başına kabul edilebilir miktarlarda kayıt gösterilmesini sağlamaktadır. <?php class PostsController extends AppController { public $paginate = array( 'fields' => array('post.id', 'Post.created'), 'limit' => 25, 'order' => array( 'Post.title' => 'asc' ) ); } public function list_recipes() { $data = $this->paginate('post'); $this->set('data', $data); }

Model Model veriyi temsil eder ve nesne yönelimli programlamadaki şey e denk gelir. (ev, araba, kitap, yazar) Bir model başka modellerle ilişkilendirilebilir. Örneğin bir Tarif, o tarifin Yazarı ve tarifin İçindeki Malzemeler ile ilişkilendirilebilir. Modeller CakePHP'de veriye erişim için kullanılmaktadırlar. Recipe->AppModel->Model sınıfından türetilir. CakePHP veriyi kaydetmek, silmek ve aramak için metodlar sunar.

Örnek Model 1.<?php 2.# /app/models/ingredient.php 3.class Ingredient extends AppModel { 4. public $validate = array(); 5. public $belongsto = array(); 6. public $hasmany = array(); 7. 8.} 9.?>

Modeller Arası İlişkilendirme CakePHP'de dört türde ilişki vardır. İlişki bire bir one to one birden çoğa one to many çoktan bire many to one çoktan çoka many to many Ba ğ Türü hasone hasmany belongsto hasandbelongstoma ny Örnek Bir kullanıcının bir profili vardır. Sistemdeki kullanıcıların birden çok tarifi vardır. Tarifler kullanıcıya aittir. Tariflerin birden çok etiketi vardır ve birden çok eitkete aittir.

Model - hasone Şey ler arasındaki birebir ilişkiyi tanımlar. User has one Profile 1. <?php 2. class User extends AppModel { 3. var $hasone = 'Profile'; 4. } 5.?> a b c 1, fk(a) 2, fk(b) 3, fk(c)

Model - hasmany Bir şey ile sahip olduğu birden fazla şey arasındaki ilişkiyi tanımlar. User has many Comment(s) 1. <?php 2. class User extends AppModel { 3. var $hasmany = array( a b c 1, fk(b) 2, fk(b) 3, fk(b) 4. 'Comment' => array( 5. 'classname' => 'Comment', 6. 'foreignkey' => 'user_id', 7. 'conditions' => array('comment.status' => '1'), 8. 'order' => 'Comment.created DESC', 9. 'limit' => '5', 10. 'dependent'=> true 11. ) 12. ); 13. } 14.?>

Model - belongsto Bir şey ile ait olduğu şey (ler) arasındaki ilişkiyi tanımlar. Eğer bir model yabancı anahtar (Foreign Key) içeriyor ise başka bir modele aittir. Profile belongs to User 1. <?php 2. class Profile extends AppModel { 3. var $belongsto = array( 4. 'User' => array( 5. 'classname' => 'User', 6. 'foreignkey' => 'user_id' 7. ) 8. ); 9. } 10.?> a b c 1, fk(b) 2, fk(b) 3, fk(c)

Model - hasandbelongstomany Bir şey in başka şey lere sahip olduğu aynı zamanda başka şey lere ait olduğu ilişkiyi tanımlar. Recipe(s) HABTM Tag(s) 1. <?php 2. class Recipe extends AppModel { 3. var $hasandbelongstomany = array( 4. 'Tag' => 5. array( 6. 'classname' => 'Tag', 7. 'jointable' => 'recipes_tags', 8. 'foreignkey' => 'recipe_id', 9. 'associationforeignkey' => 'tag_id', 10. 'unique' => true 11. ) a fk(a), fk(1) 12. ); 13. } b fk(b), fk(1) 14.?> c fk(b), fk(2) 1 2 3

Model Geri Çağrıları (callbacks) Denetçilerde olduğu gibi Model'lerin de geri çağrı metodları bulunmaktadır. beforefind() çağrısı arama ile ilişkili bir metod çalıştırılmadan önce çağırılır. afterfind() arama ile ilişkili bir metod çalıştırıldıktan sonra çağırılır. beforevalidate() model içi doğrulama işlemi yapılmadan önce çağırılır. beforesave() verinin doğrulanmasından sonra veritabanına kayıt edilmeden hemen önce çağırılır. aftersave() veri veritabanına yazıldıktan sonra çağırılır. before/afterdelete() veri silinmeden önce/sonra çağırılır. onerror() eğer model katmanında bir hata oluşursa cağırılır.

Model hasmany örnek veri $this->user->find() çağrısı için örnek bir sonuç Array ( [User] => Array ( [id] => 121 [name] => Gwoo the Kungwoo [created] => 2007-05-01 10:31:01 ) [Comment] => Array ( [0] => Array ( [id] => 123 [user_id] => 121 [title] => On Gwoo the Kungwoo [body] => The Kungwooness is not so Gwooish [created] => 2006-05-01 10:31:01 ) [1] => Array ( [id] => 124 [user_id] => 121 [title] => More on Gwoo [body] => But what of the Nut? [created] => 2006-05-01 10:41:01 ) ) )

Temel Model Metodları create() modeli yeni bir kayıt yazmak üzere sıfırlar. save($data) uygun biçimde aktarılmış veriyi veritabanına yazar. find() modelden sorgu yapar, sorgu sonucunu uygun biçimde döndürür. Denetçi içinden basit bir örnek: 1. $data['person']['name']='ahmet'; 2. $data['person']['last_name']='güzelinsan'; 3. $this->person->create(); 4. $this->person->save($data); 5. 6. $result=$this->person->find('all'); 7. print_r($result); 8. Array 9. ( 10. [Person] => Array( 11. [0] => Array( 12. [name] => Ahmet 13. [last_name] => Güzelinsan 14. ) 15. ) 16. )

Model: Gelişmiş Sorgulama $results=$this->person->find('all',array( 'conditions' => array('person.gender' => 'm'), 'recursive' => 1, //ne kadar derine 'fields' => array('person.name','person.gender), //getirilecek alanlar 'order' => 'Person.name ASC', //sıralama 'limit' => 10, //kaç tane )); Cinsiyeti erkek olan ki ilerin ad ve cinsiyetlerini, adlarına göre sıralama ş yaptıktan sonra ilk 10 tanesini getir.

Doğrulama (Validation) Veritabanına gönderilen verinin kayıt edilmeden veya güncellenmeden önce doğrulanmasını sağlar. Doğrulamanın nasıl yapılacağı ilgili model sınıfı içersinde $validate özeliğinin atanmasıyla belirlenir. CakePHP'nin kendi kural tanımları bulunmaktadır. alphanumeric //sadece sayı ve metine izin verir cc // geçerli bir kredi kartı numarasımı? email // geçerli bir epostamı? ip //geçerli bir IP adresimi? isunique // bu alan tekil mi? url //geçerli bir url mi?... Bunların dışında kendimiz fonksiyon yazarak başka doğrulama kuralları oluşturabiliriz. Her bir alan için bir kural belirlenebileceği gibi birden fazla kuralda tanımlanabilir. Kurallar aşağıdaki parametrelerle de güncellenebilir. Required=>true Kayıt edilmesi için bu alanın bulunması gerekiyor. AllowEmpty=>true Bo ş gönderilmesine izin veriliyor. On=>[create update] Kuralı yeni kayıt/kayıt güncelleme sırasında işlet.

Örnek: Doğrulama <?php class User extends AppModel { public $validate = array( 'alias' => array( 'alphanumeric' => array( } ); 'rule' => 'alphanumeric', 'required' => true, 'message' => 'Alphabets and numbers only' ), 'between' => array( 'rule' => array('between', 5, 15), 'message' => 'Between 5 to 15 characters' ) ), 'password' => array( 'rule' => array('minlength', '8'), 'message' => 'Minimum 8 characters long' ), 'email' => 'email'

Davranış (Behaviour) Davranışlar doğrudan model ile alakalı olmayan ancak eklenmesi istenen özellikleri kolayca eklemeye olanak tanır. Örneğin bir modelimizde ağaç veri yapısını saklamak için veritabanını kullanmaya ihtiyaç duyalım. Sadece bu model için ağaç yapısına müdahale edecek metodlar yazmak yerine modelimize TreeBehaviour, ağaç davranışını ekleyerek modelin içinde tuttuğu veriye ağaç veri yapısı biçiminde davranması sağlanabilir. CakePHP ile pekçok hazır davranış gelmektedir. (ACL, Containable, Translate, Tree)

Görünüm (View) Kullanıcıya konuştuğunuz katman. Görünüm dosyaları (.ctp uzantılı) düz PHP olarak yazılırlar ve /app/views/<controller>/<action>.ctp konumuna yerleştirilirler. Örneğin Products denetçisinin view() eyleminin görünüm dosyası /app/views/products/view.ctp'dir.

Görünüm Parçaları Görünüm dosyaları birkaç farklı parçadan oluşabilirler. layouts (yerleşim) görünüm dosyalarını saran üst katman, görünüm dosyaları bu yerleşim dosyalarının içersinde oluşturulurlar elements (öğeler) farklı sayfalarda yerleşimin farklı yerlerinde tekrar edilmesi gereken öğeler /app/views/elements/ dizinine yerleştirilerek farklı görünümlerden çağırılabilirler. helpers (yardımcılar) farklı görünümler içersinde kullanılması gereken, görünümü işleyecek mantıkların tutulduğu sınıflardır. Yardımcılar vasıtasıyla örneğin formlar ve HTML kodları oluşturabilirsiniz.

Örnek Yardımcı: HTML HtmlHelper HTML ile ilgili seçenekleri basit, hızlı değişikliğe daha kolay ayak uyduracak biçimde üretmek. <?php //anchor tag echo $this->html->link( 'Dan Brown Kitapları', array('controller'=>'books', 'action'=>'list', 'author_id'=>'2'), array('target'=>'_blank') );?> <a href= /books/list/author_id:2 target= _blank >Dan Brown Kitapları</a> <?php //image tag echo $this->html->image("kediler.jpg", array("alt" => "Kediler"))?> <img src= /img/kediler.jpg alt= Kediler > <?php echo $this->html->script(array('jquery', 'wysiwyg', 'scripts'));?> <script type="text/javascript" href="/js/jquery.js"></script> <script type="text/javascript" href="/js/wysiwyg.js"></script> <script type="text/javascript" href="/js/scripts.js"></script>

Örnek Yardımcı: Session SessionComponent $_SESSION değişkeni üzerinden çalışarak birkaç kolaylık sağlar. SessionHelper, SessionComponent'un sahip olduğu özellikleri taklit ederek ona eşlik eder ve view içersinden session değerlerini okuma desteği verir. //controller içersinde SessionComponent <?php $this->session->write('person.gender', 'male'); $this->session->write('person.city', 'ankara'); //view içersinde SessionHelper <?php $sessiondata = $this->session->read('person'); print_r($sessiondata); 'Person'=>Array( 'gender'=>'male', 'city'=>'ankara' ) //controller içersinden $this->session->delete('person.gender'); //gender değerini siler $this->session->destroy(); // session'ı sıfırlar

Bir Görünüm (View) Örneği <div class="comments form"> <?php echo $this->form->create('comment');?> <fieldset> <legend><?php ('Add Comment');?></legend> <?php echo $this->form->input('user_id'); //form helper echo $this->form->input('title'); echo $this->form->input('body');?> </fieldset> <?php echo $this->form->end('submit');?> </div> <div class="actions"> <ul> <li><?php echo $this->html->link( ('List Comments', true), array('action'=>'index')); //html helper?> </li> </ul> </div>

CakePHP Komut Satırı $ cd /benim/cake/uygulamam $../cake/console/cake Komutları ile CakePHP komut satırını çağırabilirsiniz. Komut satırı vasıtasıyla, Projenizi pişirmeye başlayabilirsiniz. Otomatik kod oluşturma özelliğinden faydalanabilirsiniz. Uygulamanızıdaki bazı görevleri komut satırından yürütülecek biçimde ayarlayabilirsiniz. (cron)

CakePHP Kuralım 1. Gereksinimler karşılanmış olmalı... 2. CakePHP'yi edinin. (arşiv paketleri, svn) 3. Web sunucunuzun bir dizinine paket içeriğini yerleştirin. (ör.:/var/www/html/cake2) 4. app/tmp dizinini web sunucusu yazabilecek biçimde ayarlayın. 5. http://localhost/cake2 adresine gittiğimizde Cake'in karşılama ekranı ile karşılaşacağız...

Teorik Kısmın Sonu Buraya kadar dayandığınız için teşekkür ederim... Şimdi kek pişirebiliriz!