1 Ekim 2011 Cumartesi

Zend Framework Hızlı Başlangıç

Merhaba,

Dökümanı daha iyi okumak için bu linki kullanabilirisiniz.
https://docs.google.com/document/pub?id=10YHOANBO59DNOOmgvRE0LBrofO6jnARq9tZguG1Pa1o


Bu yazımda sizlere hızlıca Zend Framework nasıl kullanılır onu anlatacağım. Ayrıca view helper, model, zend_db, render, partial render, controller, view, module, zend view bağımsız kullanımı kullanım örneklerini göstereceğim.

Birde üstüne githubda örnek proje linkini vereceğim ve bu proje aşama aşama gelişmeye devam edecek. Bunu sıfırdan öğrenmek yerine en temel gereksinimlerin kullanıldığı bir proje olarak düşünün.

Aynı zamanda javascript işlemleri için nasıl bir yol izlediğimi inline kod yazmadan nasıl bu işleri yaptığımı göstereceğim. Tabi Burda Osman Yüksel’in emeği var onun yaptığı projeleri inceleyip “esinlenecek” birşeyler illaki buluyorum.

Gelelim projemize;

IDE: Netbeans

PHP: 5x

MySQL : 5x

1. Öncelikle projeyi indirin : https://github.com/volkan/zf-sample-project

2. sampleproject isimli bir veritabanı oluşturun.

3. zf-sample-project/developer/scripts% dizinine geçin ve restoreDb.sh dosyasının mysql bilgilerini kendinize göre güncelleyin.

4. Terminalden ./restoreDb.sh komutunu verin.

Veritabanının yüklendiğinden emin olun.


5. Browsera http://sample.local yazdığınızda açılacak şekilde projeyi ayarlayın.
Bunun için hosts dosyasına ve apache httpd.conf a ayar yapmanız gerekiyor.

Veya direk http://localhost/zf-sample-project/public yazdığınızda çalışacaktır

Şimdi dosyalarımızı tanıyalım.

configs

application.ini içerisine bütün tanımlamalarımızı yapıyoruz. Özellikle bizim kendimize ait olan Action Helper, View Helper ve dışarıdan kullanacağımız dosyaları burada belirtiyoruz. Ayrıca Genel ayarlar vs... İstersek bu dosyaların sayısını çoğaltabiliriz. kebab project de bununla ilgili örnekler mevcut oraya bakabilirsiniz.

library

Zend’in kendi Action’ını kullanmak yerine kendi oluşturduğumu kullanıp onuda Zend den extend ediyorum böylece araya bir katman daha atmış olduğumdan rahatlıkla çeşitli müdahalelerde bulunabiliyorum. Örnek session kullanımı.

Action.php

Bu actionu kullanan IndexContoller.php
Görüldüğü üzere sesion işlemlerini hızlıca hallettim.

My/Controller/Action/Helper altında Email.php var. Controller üzerinden bu helper’a ulaşıp email atabilirim. Mevcut kodlarda hata anında email atması sağlandı ama application.ini de email ayarlarını yapmanız gerek. Ayrıca resources.frontController.throwExceptions = 0 olmalı. Yoksa hataları ekrana basar.

Email.php dosyasına yazdığım metodlara ismini yazarak kolayca ulaşabilirim.

My/Module/Email.php dosyasında ise Zend_Email kullanılarak email atma işlemleri hallediliyor.

Gelelim view dosyalarından tek hamleyle çağırdığımız view helper dosyalarına.

My/View/Helper

Cdn.php -> application.ini de ayarları mevcut burdan istediğiniz şekilde içeriğinizi farklı yerlerde tutup kullanmanıza olanak sağlayan bir sistem. Aynı zamanda hızlı bir şekilde dosyalara ulaşmanızı sağlıyor.

default.phtml den örnek;

application.ini de ayarlar şu şekilde;


GetRequest.php adı üstünde.

JsModules.php

Bu dosya önemli çünkü bunun sayesinde hangi sayfada olduğumuzu javascript’e söylüyoruz o da sayfamız neyse ona göre arkada kod çalıştırıyor. Böylece html içine hiç js kodu yazmamış oluyoruz.

çıktısı

Bootstrap.php burda da her zaman çalışacak komutlarımızı application.ini içerisine yazamayacağımız şeyleri yazıyoruz. Daha amacı var ama bu kadarı şimdilik yeterli.

Şimdi bu büyük resme bakarak kalan eksikleri yazalım.

layout

Burda projenin ana hatları belirleniyor. yine default olarak default.phtml in açılacağını application.ini den yazıyoruz. Daha sonra elle değiştirebiliriz. Controller içerisinden bu işi yapmak için komut :

Aynı zamanda eğer istersek bu actiona ait render işlemini iptal edebiliriz.

Veya layout u iptal edebiliriz.

Olmadı başka sayfadan render ettirebiliriz.

$this->renderScript('static/static.phtml'); Bu komut ile index.phtml yerine istediğiniz sayfayı render ettirirsiniz.

$this->render('static'); Bu komut ile scripts/index altındaki static.phtml dosyasını render ederseniz ve bunu bir değişkene atabilirsiniz.

Ayrıca render işlemi maliyetli geliyorsa partial ile belirli parçaları view dosyalarından layoutdan çağırıp parçaları birleştirebilirsiniz. left.phtml right.phtml gibi...

Aynı zamanda örnek bir view helper erişimide mevcut. $this-> dediğimiz an view helperler elimizde... view helper dosyalarından değişkenlere müdahele edebiliriz bunu unutmayın...

Ek olarak bazı dosyaların içinde php kodu çalıştırmak ve bir takım işlemler yapmak istiyorsunuz. O zaman devreye Zend_View giriyor.

Email.php

Dosya yolunu gösterip değişken ataması yapıyorum. Ve o muhteşem an. İşlem başarılı.

Modullerde aynı şekilde çalışıyor modül adını yazıp altına controller helper scripts dosyaları atıyorsunuz. Ama modül altına attığınız helperi sadece o modül çağırır bunu unutmayın.

Veritabanı İşlemleri

Zend_Db bir ORM bunun yerine Doctrin de kullanabilirsiniz. Yukarda belirttiğim gibi kebab projesinde Doctrinli örnek mevcut.

models/DbTable altına veritabanındaki tablolarımızla uygun isimlendirilmiş dosyalar oluşturuyoruz. Önemli olan içindeki ayarların doğru yapılması.

Örnek kullanım:

Burda en basit haliyle tablodan data çektik daha fazlası için manuel ne güne duruyor değil mi ?

Son olarak gelelim JavaScript işlemlerine. Nasıl yapsakda html içine tek satır kod yazmadan bütün işlerimizi halletsek ?

Bunun için şu yöntem çok iyi.

body içine data-jsModules isimli bir özellik açıyoruz. Buraya mevcut sayfayı yazıp js nin burayı okumasını sağlıyoruz. Böylece eşleşme olduğunda bu sayfaya ait kodlar çalışıyor.

Örnek kod:

sampleproject.pages.denemeIndex = {};

(function ($, index, env) {

var onload = function() {

$.jGrowl(env.denemeIndex)

};

index.init = function () {

onload()

}

}(jQuery, sampleproject.pages.denemeIndex, sampleproject.env));

Şimdilik aklıma gelenler bunlar.

Eğer talep olursa ve fırsat olursa ilerleyen günlerde admin tarafında ACL ile güvenlik kontrolü için örnek Plugin işlemleri user işlemleri vs.. anlatacağım.

http://volkanaltan.com

http://framework.zend.com/manual/

https://github.com/volkan/zf-sample-project

https://github.com/kebab-project

4 yorum:

Faruk Temur dedi ki...

Projeyi çalıştırdığınızda,

Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for '3.0/DST' instead in Unknown on line 0

hatasını alırsanız application.ini dosyasına

phpSettings.display_errors = 1

kodundan sonra aşağıdaki kodu eklemeniz gerekecektir.

phpSettings.date.timezone = "Europe/Istanbul"

İyi kodlamalar..

Volkan dedi ki...

Merhaba Faruk,

İlgin için teşekkürler. Gerekli eklemeyi yaptım.

serkanyilmaz dedi ki...

şu terminale komutunu yazma olayını
bir türlü yapamadım sh: zf-sample-project/developer/scripts%: No such file or directory
hatasını veriyor

Volkan dedi ki...

Merhaba Serkan,

Projeyi indirdikten sonra developer/script klasöründe girdiğinde ./restoreDb yazman gerekiyor.

Aşağıda gözüken yazı biçimini ben teminal ayarlarından özelleştirdiğim için kafanı karıştırıyor olabilir.

local->zf-sample-project/developer/scripts% ./restoreDb