bildirgec.org

php framework hakkında tüm yazılar

CakePHP ile Form Verilerini Doğrulama

ceyranci | 12 June 2009 17:10

Güvenli bir site yaparken dikkat etmemiz gereken en önemli noktalardan biri de kullanıcı girişlerini kontrol etmek ve doğrulamak. Her kullanıcının masum ve iyi niyetli olmadığını düşünerek sitemizi geliştirmeliyiz.
Aslında zor gibi görünen bu yöntemleri CakePHP ile çok kolay yapabiliyoruz. Modelleri tanımlarken $validate isminde bir değişken tanımlayıp gerekli kuralları orada belirtiyoruz.

1
2
3
4
5
6
7
8
9
var $validate = array(
'alanAdi' => array(
'rule' => 'kuralIsmi',
'required' => true,
'allowEmpty' => false,
'on' => 'create',
'message' => 'Hata Mesajı'
)
);

Şeklinde belirtiyoruz. Buradaki ‘rule’ parametresinin karşısına istediğimiz kuralı girebiliyoruz. Bunlardan bazıları:
alphaNumeric
Girilen değerin sadece harfler ve rakamlardan oluşması gerekir. Aksi takdirde message parametresiyle belirtilen hata mesajı alınır.

1
2
3
4
5
6
var $validate = array(
'kullanici_adi' => array(
'rule' => 'alphaNumeric',
'message' => 'Sadece harfler ve rakamlar kullanılabilir.'
)
);

Buradaki message parametresi ile kullanıcını veriyi hatalı girmesi sonucu göreceği mesajı yazıyoruz.
between
Girilen değerin karakter sayısının hangi aralıkta olacağı belirlenir.

1
2
3
4
5
6
var $validate = array(
'password' => array(
'rule' => array('between', 6, 20),
'message' => ''Şifreniz en az 6 en fazla 20 karakter olmalı"
)
);

date
Girilen değerin belirttiğimiz bir formatta bir tarih olmak zorundadır.

1
2
3
4
5
6
7
var $validate = array(
'kayit_yili' => array(
'rule' => 'date',
'message' => 'YY-MM-DD formatında bir tarih girin.',
'allowEmpty' => true
)
);

allowEmpty parametresi true olduğu zaman bu kısım boş bırakilabilir demektir.
email
Girilen değerin bir eposta adresi olmak zorundadır.

1
2
3
4
5
6
var $validate = array(
'email' => array(
'rule' => array('email', true),
'message' => 'Lütfen doğru e-posta adresi girin.'
)
);

CakePHP’de ilişkilendirmeler

ceyranci | 11 May 2009 14:13

CakePHP‘de modeller arasındaki ilişkilendirmeler diğer yazılarımda şurada ve şurada bahsetmiştim. Şimdi bu ilişkilendirmeleri daha ayrıntılı olarak inceleyeceğiz. CakePHP’de 4 ilişkilendirme bulunmaktadır:

  • hasOne
  • hasMany
  • belongsTo
  • hasAndBelongsToMany (HABTM)

hasOne
Bu ilişkilendirmede bir modele ait bir model bulunur.

1
2
3
4
5
6
7
<?php
class Kullanici extends AppModel
{
var $name = "Kullanici";
var $hasOne = "Profil";
}
?>

Burada Kullanici ve Profil adında iki farklı modelimiz var. İlişkilendirme sonucunda bir kullanıcının bir profili olur.

1
2
3
4
5
6
7
<?php
class Kullanici extends AppModel
{
var $name = "Kullanici";
var $hasOne = array("Profil"=>array("className"=>"Profil","dependent"=>true));
}
?>

Burada bir array kullanarak özellikleri biraz daha değiştirdik. İlk örnekteki ilişkilendirmelerde model isimlerinin de uygun olması gerekiyordu. Ama şimdi model ismini biz belirttiğimiz için sorun yok. “dependent” parametresini true yaptığımızda ise herhangi bir kullanıcı silindiğinde ona ait profil de silinir.

CakePHP ile basit bir ziyaretçi defteri – 2

ceyranci | 20 April 2009 15:10

Bir önceki yazımda oluşturduğumuz ziyaretçi defterine herkes yazı yazabiliyordu. Şimdi de bu ziyaretçi defterine yazı yazmak için üye girişi yapma zorunluluğu ekleyeceğiz.
Ziyaretçi defterinde yazdığımız yazıların saklanacağı bir tablo oluşturmuştuk. Şimdi de kullanıcı bilgilerinin saklanacağı bir tablo oluşturacağız. Fakat bu tabloyu oluşturmadan önce diğer tablomuzda bir değişiklik yapmamız lazım. Ziyaretçi defterinde oluşturduğumuz tablo şu şekildeydi:

1
2
3
4
5
6
7
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

Buradaki user alanını user_id olarak değiştirip VARCHAR( 32 ) yerine de INT( 8 ) yazıyoruz. Değişiklik yaptıktan sonraki hali:

1
2
3
4
5
6
7
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_id` INT( 8 ) NOT NULL
) ENGINE = MYISAM

Bunu yapmadan önce user bir string değere karşılık geliyordu ve ziyaretçi defterine yazı eklerken kullanıcı tarafından giriliyordu. Şimdi ise user_id oldu ve bir sayıya karşılık geliyor. Yani birazdan oluşturacağımız users tablosunda yer alan kullanıcıların id değeri.
Ali isminde bir kullanıcımız olsun. Ali’nin id’si 17 olsun ve Ali ziyaretçi defterine bir yazı eklemek için giriş yapsın. Ali, ziyaretçi defterine bir yazı yazdığında bu yazının user_id değeri 17 olur. Yazıyı ekrana yazdırırken de id’si o yazının user_id değeri olan kullanıcın adı yani name değeri veritabanından okunur. Şimdi ziyaretçi defterimizi geliştirmeye başlayalım. Ziyaretçi defterini oluşturmadıysanız buradan oluşturduktan sonra yazının geri kalan kısmını okumaya devam edin.
Oluşturduğumuz veritabanında (defter) users isminde bir tablo oluşturalım.

1
2
3
4
5
6
7
CREATE TABLE `defter`.`users` (
`id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 32 ) NOT NULL ,
`password` VARCHAR( 64 ) NOT NULL ,
`email` VARCHAR( 128 ) NOT NULL ,
`created` DATETIME NOT NULL
) ENGINE = MYISAM

Model Oluşturma
Şimdi cakeyol/app/models/ dizini içine user.php ismiyle user modelimizi oluşturup içine şunları yazalım:

1
2
3
4
5
6
7
<?php
class User extends AppModel
{
var $name = 'User';
var $hasMany = 'Post';
}
?>

CakePHP ile basit bir ziyaretçi defteri

ceyranci | 09 April 2009 09:45

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.

1
2
3
4
5
6
7
8
9
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:
    1
    2
    3
    4
    5
    6
    7
    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:

    1
    2
    3
    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:

    1
    2
    3
    4
    5
    6
    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:

    1
    2
    3
    4
    5
    6
    <?php foreach($tum_yazilar as $p):
    echo "<h2>".$p['Post']['title']."</h2>";
    echo "yazan: <b>".$p['Post']['user']."</b>";
    echo "<p>".$p['Post']['body']."</p>";
    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.

    1
    2
    3
    4
    5
    6
    7
    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:

    1
    2
    3
    4
    5
    6
    7
    <?php
    echo $form->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

    1
    <input type=text>

    şeklinde görülüyor veya “body” alanını TEXT olarak belirttiğimiz için sayfada

    1
    <textarea></textarea>

    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;

    1
    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.

Son Derece Kullanışlı PHP Araçları

pinkfloyd | 01 April 2009 19:19

PHP, günümüzde en çok kullanılan sunucu taraflı betikleme dillerinden bir tanesidir. Aralarında Facebook, Digg ve WordPress gibi dünya çapında meşhur sitelerin de bulunduğu, PHP kullanan 20 milyonun üzerinde kayıtlı alan adı ile PHP, pek çok web geliştiricisinin bu dili Python ya da Ruby gibi diğer betikleme dillerine nazaran tercih etmesini sağlıyor.

PHP daha hızlıdır ve pratikte en çok kullanılan betikleme dilidir. Bu dilin derinlemesine yazılmış belgelemesi, devasa komünitesi, halihazırda kullanıma sunulmuş pek çok betiği ve iyi desteklenen çatıları (framework) bulunmaktadır ancak bunlardan en önemlisi PHP öğrenmek, örneğin Python gibi diğer dillere kıyasla çok daha kolaydır. Sırf bu sebeple bile çok sayıda PHP geliştiricisi, diğer geliştiricilerin geliştirme süreçlerini kolaylaştırmak için pek çok araç geliştirmektedir.

Bu yazıda kodlama sürecinizi hızlandıracak ve iyileştirecek 50 kullanışlı PHP aracını bulacaksınız. Diğer şeylerin yanında özellikle hata ayıklamaya, test etmeye, profillemeye ve PHP’de kod yönetimine yönelik pek çok kütüphane ve sınıfa da bu yazıda yer verildi.

Hata Ayıklama Araçları

1. Webgrind

Webgrind PHP 5 için bir Xdebug profilleme web önyüzüdür. kcachegrind‘in pek çok özelliğini içerir ve tüm platformlara sadece birkaç dakika içerisinde kurulabilir. Özellikle çabuk ve fazla detaya inmeden PHP betikleriniz üzerinde iyileştirme yapmayı tercih ediyorsanız, webgrind ihtiyacınıza cevap verecek kalitede bir çözüm.

Webgrind
Webgrind

CakePhp Kurulumu

admin | 22 January 2009 10:36

Cake Php Kurulumu

Cakephp bir php framework’udur ve php de daha kolay guvenli ve hızlı kod yazmamızı sağlar. Framework’ler temel olarak sık kullanılan fonksiyon, class, kütüphane ve kod parçacıklarının yer aldığı paketler olarak tanımlanabilir. Diğer Php framework’eleri için bu adrese bakabilirsiniz.
Sitede gorüldügü gibi birçok php framework olmasına rağmen en çok kulanılan ve başlangıç seviyesinde kullanılan cakephp’den başlayalım.
Eğer profesyonel kullanıcı iseniz zend framwork tavsiye ederim.
İlk Önce bu adresten indirdiğimiz cakephp’yi eğer local (kişisel bilgisayar) sunucu çalışıyorsak, htdocs dizini içiresine atıyoruz. Eğer sitenize atacaksanız public_html içine atabilirsiniz.

Size Sıfırdan PHP Öğretecek 25 Kaynak

pinkfloyd | 28 December 2008 19:33

PHP dinamik web siteleri ve uygulamaları geliştirmek için geliştirilen sunucu tabanlı bir betikleme dilidir. Halihazırda bir PHP kurdu olabilir ya da PHP’nin ne olduğundan bihaber olabilrsiniz. Buna rağmen eğer herhangi bir web geliştirme projesine dahil olmayı planlıyor ya da halihazırda bu ortamın kıyısından köşesinden tutuyorsanız, bu öğrenmesi kolay programlama dilini öğrenmek zorundasınız. Bugünkü makalemizde sizi PHP ile programlamaya başlamanıza yardımcı olacak 25 kaynaktan bahsetmek istiyorum.

PHP de ne ola?
Kullanma kılavuzundan kopyala-yapıştır yapacak olursak, PHP “HTML içerisine gömülebilen ve web tabanlı geliştirme projeleri için kullanılabilen bir betikleme dilidir”.

Php Çalışma Ortamları – Php Frameworks

studentT | 01 October 2008 19:05

PHP Frameworklere giriş niteliğinde güzel bir yazıdır. Frameworklerin nasıl kullanılacağından çok ne işe yaradıklarını ve neden kullanmamız gerektiğini gösterir. PHP Frameworklerin özelliklerini ve belli başlı en gelişmiş PHP Frameworkleri gösterir.

Yazının linki

Php Framework paketleri

soruman | 04 September 2007 23:57

Bildiriye Php Framework’lerine ve bazı framework’lerin karşılaştırıldığı bir yazıya bağlantı vermek amaçlı başlasam da öncellikle framework nedir açıklamak daha doğru olacak. Ben framework nedir biliyorum, sadede gelelim derseniz kalın olarak yazılmış “İşte başlıca PHP Framework’leri” bölümünden devam edebilirsiniz.

Framework’leri günlük konuşma dilinde “Amerikayı yeniden keşfetmeye gerek yok” olarak kullandığımız cümlenin programlamadaki karşılığı olarak düşünebiliriz. Framework’ler temel olarak sık kullanılan fonksiyon, class, kütüphane ve kod parçacıklarının yer aldığı paketler olarak tanımlanabilir. Kimileri
PHP Framework’lerinde olduğu gibi yalnızca belirli bir programlama diline hizmet ederken, kimileri ise birçok programlama dili tarafından ortak kullanılabilir. (.NET Framework gibi) Framework’ler sayesinde “amerikayı yeniden keşfetmez”, framework içerisinde bulunan metodları kullanırsınız. Bu web uygulamalarında büyük oranda zaman kazanmanızı sağlarken, masa üstü uygulamalarda uygulamanızın daha az yer kaplamasını da yardımcı olur. Artık başlı başına bir bildiri olabilecek framework konusunu bırakıp, asıl konu olan php framework’lerine gelelim. Frameworkler konusunda daha ayrıntılı bilgi edinmek için wikipedia’daki bu başlığı okuyabilirsiniz.