<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Huysuz Adam &#187; Zend Framework</title>
	<atom:link href="http://www.huysuzadam.com/tag/zend-framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.huysuzadam.com</link>
	<description>Web teknolojileri ile ilgili teknik bir blog...</description>
	<lastBuildDate>Fri, 12 Feb 2010 07:24:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zend Framework 1.8 Kurulumu</title>
		<link>http://www.huysuzadam.com/2009/07/14/zend-framework-1-8-kurulumu/</link>
		<comments>http://www.huysuzadam.com/2009/07/14/zend-framework-1-8-kurulumu/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 15:26:05 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[ZF Örnek]]></category>
		<category><![CDATA[ZF Kurulum]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=287</guid>
		<description><![CDATA[Daha önce ZF 1.5.2 için bir örnek oluşturmuştum. Ancak 1.8 versiyonundan itibaren işler biraz değişti. Aslında proje yaratmak oldukça kolaylaştı ama ilk kurulum biraz uğraştırabilir.
ZF 1.8&#8242;den itibaren, ilk kez 1.7 versiyonunda gelen Zend_Tool epey önplana çıktı. Artık &#8220;zf create project&#8221; gibi bir komutla çalışır bir proje elde etmek mümkün. Tabii gerekli ayarları yaptıktan sonra&#8230;

Zend Framework [...]]]></description>
			<content:encoded><![CDATA[<p>Daha önce <a href="http://www.huysuzadam.com/2008/06/11/zend-frameworke-giris-ve-ornek-proje/">ZF 1.5.2 için bir örnek</a> oluşturmuştum. Ancak 1.8 versiyonundan itibaren işler biraz değişti. Aslında proje yaratmak oldukça kolaylaştı ama ilk kurulum biraz uğraştırabilir.</p>
<p>ZF 1.8&#8242;den itibaren, ilk kez 1.7 versiyonunda gelen Zend_Tool epey önplana çıktı. Artık &#8220;zf create project&#8221; gibi bir komutla çalışır bir proje elde etmek mümkün. Tabii gerekli ayarları yaptıktan sonra&#8230;</p>
<p><span id="more-287"></span></p>
<h2>Zend Framework Kurulumu</h2>
<p>Bu örnek windows için oluşturulmuştur ama linux ve mac için de mantık benzerdir.</p>
<p>Düzgün ve çalışan bir Apache &#8211; PHP &#8211; MySQL kurulumu olduğu varsayılmıştır.</p>
<p>PHP&#8217;nin &#8220;C:\php&#8221; altında olduğu varsayılmıştır.</p>
<p>Zend Framework 1.8.4 ile test edilmiştir, eski versiyonlarda çalışmayacağı garanti olup ileriki versiyonlar için söz veremem zira Zend zırt pırt değiştiriyor yapıyı&#8230;</p>
<h3>Yapılacaklar</h3>
<ul>
<li>Her projede ayrı ayrı kopyalar oluşturmamak için ZF&#8217;ü genel bir dizine koyup php&#8217;nin include_path&#8217;ine ekleyeceğiz.</li>
<li>Projeleri otomatik yaratan zf.bat betiğine erişebilmek için zf.bat  ve php.exe dosyalarının sistem PATH&#8217;ine ekleyeceğiz.</li>
<li>Projeyi web sunucusunun kök dizini <strong>dışındaki</strong> bir &#8220;Projeler&#8221; dizininde oluşturacağız. (Güvenlik nedeniyle asla webroot&#8217;ta oluşturmayın!)</li>
<li>Kök dizini dışında olduğumuz için bir virtual host tanımlayacağız. Böylece şık adreslerimiz de düzgün çalışacak.</li>
<li>Projemizi test edip ilk kez çalıştığını göreceğiz.</li>
</ul>
<p><strong>Projenin Geliştirilmesi</strong> (Sonraki Yazı)</p>
<ul>
<li> Proje dizin yapısına bir göz atacağız.</li>
<li>Proje ile ilgili ilk ayarları yapacağız (application.ini)</li>
<li>Veritabanıyla ilgili işlemler için bir model yaratacağız.</li>
<li>Birkaç action oluşturacağız ama silemeyeceğiz !?!? (Açıklaması var)</li>
<li>Bir layout oluşturup view&#8217;lerimizi bu layout ile ilişkilendireceğiz.</li>
<li>Basit bir helper oluşturacağız.</li>
</ul>
<h2>Kurulum</h2>
<p>Öncelikle <a href="http://framework.zend.com/download/latest">son versiyonu</a> indirmekle başlayalım. Full versiyona şimdilik gerek yok o yüzden minimal olan versiyonu indirebilirsiniz.</p>
<p>İndirdiğiniz arşivi açtığınızda bin ve library olmak üzere iki dizin göreceksiniz. Bu dizinlerden bin içerisinde zf.bat, zf.php ve zf.sh dosyaları bulunur. Bu dosyalarla ilgili tanımları yaptıktan sonra projeyi otomatik olarak oluşturacak betikler bunlardır. Diğer dizin olan library altında ise Zend Framework bulunuyor.</p>
<h3>ZF&#8217;ün PHP include_path&#8217;ine Eklenmesi</h3>
<p>PHP kurulumunuzun &#8220;C:\php&#8221; altında olduğunu farz ederek, &#8220;C:\php\ZF&#8221; diye bir dizin oluşturun.</p>
<p>PEAR kütüphanesinin de &#8220;C:\php&#8221; içerisinde olduğunu düşünerek en uygun yerin burası olduğuna karar verdim ama başka yerlere kurmak da mümkün aslında.</p>
<p>Kütüphaneye erişebilmek için php.ini dosyasını açıp <strong>include_path</strong> tanımlamasına &#8220;C:\php\ZF\library&#8221; dizinini ekleyin.</p>
<div style="border-top: 1px solid #cccc99; border-bottom: 1px solid #cccc99; padding: 8px; background-color: #ffffcc;"><strong>Notlar</strong></p>
<ul>
<li>Doğru php.ini&#8217;yi güncellediğinizden emin olun. Bunun için bir php dosyasına &#8220;phpinfo();&#8221; yazıp çalıştırdıktan sonra &#8220;Loaded Configuration File&#8221; kısmına bakın.</li>
<li>PEAR kurduysanız php.ini dosyasının en sonunda bir include_path tanımı daha olabilir.</li>
<li>Birden fazla dizin tanımlanacaksa windows için noktalı virgül, linux ve mac için iki nokta ile ayırılması gerekir. Benim windows bilgisayarımdaki include_path&#8217;in son hali: include_path=&#8221;.;C:\php\pear;C:\php\ZF\library&#8221;</li>
</ul>
</div>
<p>Apache&#8217;yi yeniden başlattığınızda include_path tanımı sayesinde artık hangi dizinde olursa olsun php içerisinden require(&#8220;Zend/&#8230;.&#8221;); şeklinde dosya çağırabilir hale geldiniz. Ama çağırmanıza gerek olmayacak o ayrı.</p>
<h3>ZF Betiğinin Çalıştırılabilir Dizinlere (Path) Eklenmesi</h3>
<p>Bunun için Control Panel → System → Advanced System Settings penceresine gidin (Türkçe windows kullanıcıları başının çaresine baksın).</p>
<p>Environment Varibles&#8217;a tıklayınca açılan penceredeki System Variables altından PATH değişkeninin sonuna &#8220;C:\php\ZF\bin&#8221; ve &#8220;C:\php&#8221; dizinlerini ekleyin. (Noktalı virgülle ayırarak)</p>
<p>Bu aşamadan sonra bilgisayarınız baştan başlatmanız gerekecek maalesef. (Logout &#8211; Login kurtarmaz).</p>
<p>Buraya kadar eğer doğru bir şekilde yaptıysanız &#8220;Command Prompt&#8221; açıp &#8220;zf show version&#8221; yazdığınız zaman şöyle bir şey görmeniz lazım:</p>
<pre>Zend Framework Version: 1.8.4</pre>
<h3>İlk Projemizin Oluşturulması</h3>
<ul>
<li>Eğer yoksa, projeler ile ilgili web sunucunun <strong>kök dizininden farklı bir yere</strong> bir dizin oluşturun. Mesela benimkisi &#8220;D:\Projeler&#8221;.</li>
<li>Bir &#8220;Command Prompt&#8221; açın ve o dizine cd ile gidin. Projeniz için dizin yaratmayın! zf.bat sizin için otomatik olarak halledecek bunu.</li>
<li> Şu komutu verin:
<pre>zf create project zf_deneme</pre>
</li>
</ul>
<p>ZF betiği projeler dizini altında <strong>zf_deneme</strong> diye bir dizin oluşturacak ve başlangıç için önerilen dizin yapısını oluşturacaktır:</p>
<p><img class="size-full wp-image-292" src="http://www.huysuzadam.com/wp-content/uploads/2009/07/zf_directory_structure.gif" alt="Zend Framework Directory Structure" width="185" height="433" /></p>
<h3>Virtual Host Tanımlaması</h3>
<p>Aslında virtual host olayına girmeden de çalışır hale getirmek mümkün. Bir &#8220;<strong>Alias</strong>&#8221; oluşturulabilir (Bkz. <a href="http://www.huysuzadam.com/2008/06/11/zend-frameworke-giris-ve-ornek-proje/">önceki yazım</a>), ya da güvenliği boşverip doğrudan kök dizinine yerleştirilebilir ki kesinlikle tavsiye etmiyorum, alışmayın&#8230; Ancak her halükarda public dizini için &#8220;<strong>AllowOverride All</strong>&#8221; tanımını yapmalısınız.</p>
<p>Windows&#8217;da virtual host tanımlamak için önce httpd.conf dosyasını bulun. Bu dosyada:</p>
<pre>NameVirtualHost *:80</pre>
<p>satırının comment&#8217;li olmadığından emin olun. Eğer rewrite modülü yüklü değilse</p>
<pre>LoadModule   rewrite_module   modules/mod_rewrite.so</pre>
<p>satırını ekleyin ya da başındaki commenti kaldırın.</p>
<p>Virtual host ile ilgili diğer tanımların bulunduğu yere aşağıdakileri tanımlayın (Bu arada virtual host tanımlamaları ayrı bir dosyada tutuluyor da olabilir, apache&#8217;nin conf dizinine bir bakın) :</p>
<pre>&lt;VirtualHost *:80&gt;
  ServerName localhost
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
  ServerName zf_deneme.localhost
  DocumentRoot D:\Projects\zf_deneme\public
  &lt;Directory "D:\Projects\zf_deneme\public"&gt;
    AllowOverride All
  &lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>Yaptığınız değişikliklerin geçerli olması için apache&#8217;yi restart etmeniz gereklidir.</p>
<p>Son olarak <strong>C:\Windows\System32\drivers\etc</strong> dizinindeki <strong>hosts</strong> dosyasını notepad ile açın ve içerisine</p>
<pre>127.0.0.1       zf_deneme.localhost</pre>
<p>satırını ekleyin. Windows&#8217;u restart etmenize gerek yok&#8230;</p>
<p>Artık <strong>http://zf_deneme.localhost/</strong> adresine bağlandığınızda projenize erişebiliyor olmanız lazım:</p>
<p><img class="aligncenter size-full wp-image-295" style="border: 3px solid #ccc;" title="zf_gettingstarted_screenshot" src="http://www.huysuzadam.com/wp-content/uploads/2009/07/zf_gettingstarted_screenshot.jpg" alt="Zend Framework Kurulumu" width="480" height="427" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2009/07/14/zend-framework-1-8-kurulumu/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.8</title>
		<link>http://www.huysuzadam.com/2009/04/09/zend-framework-18/</link>
		<comments>http://www.huysuzadam.com/2009/04/09/zend-framework-18/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 07:37:34 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=240</guid>
		<description><![CDATA[ZF preview release yayımlanmış. Bence çok önemli bir versiyon bu zira kendileri de Zend Framework&#8217;ün &#8220;framework&#8221; tanımına tam anlamıyla uymadığını kabul etmiş sonunda&#8230;
Framework&#8217;ler kullanıcıya bir uygulamayı nasıl yaratacağı ile ilgili bazı varsayımlar sunar ve bu varsayımlar doğrultusunda kullanıcıyı yönlendirir. ZF tarafında ise &#8220;loose coupling&#8221; dediğimiz modellerin birbirinden bağımsız çalışabilmesi konusu çok daha ön planda tutulmuş. [...]]]></description>
			<content:encoded><![CDATA[<p>ZF preview release yayımlanmış. Bence çok önemli bir versiyon bu zira kendileri de Zend Framework&#8217;ün &#8220;framework&#8221; tanımına tam anlamıyla uymadığını kabul etmiş sonunda&#8230;</p>
<p>Framework&#8217;ler kullanıcıya bir uygulamayı nasıl yaratacağı ile ilgili bazı varsayımlar sunar ve bu varsayımlar doğrultusunda kullanıcıyı yönlendirir. ZF tarafında ise &#8220;loose coupling&#8221; dediğimiz modellerin birbirinden bağımsız çalışabilmesi konusu çok daha ön planda tutulmuş. Bu da ZF&#8217;yi &#8220;çözebilenlere&#8221; büyük esneklik sağlarken ilk başlayanların öğrenmesini ve adaptasyonunu zorlaştırıyor. </p>
<p>Hatta ZF kullananlar için bile yeni bir proje yaratmak çok zahmetli. Yani tamam kendinize kolaylıklar buluyorsunuz mutlaka ama yine de zor.</p>
<p>Açıkçası bu eski gidişatla Zend Framework&#8217;ün efektif kullanılabilmesi için bir alt framework&#8217;e ihtiyacı olacağını düşünüyordum ama bu son hamleyle sanıyorum pratik bir framework olma yoluna döndü ZF.</p>
<p><span id="more-240"></span></p>
<h2>Zend Framework 1.8&#8242;de değişen ne?</h2>
<ul>
<li><strong>Zend_Tool:</strong> Proje yaratmanızı ve projeye yeni parçalar (controller, view, test gibi) eklemenizi kolaylaştıran bir konsol aracı.</li>
<li><strong>Zend_Application:</strong> Bootstrap dosyasını daha organize bir şekilde oluşturmanızı sağlayan araç&#8230;</li>
<li><strong>Zend_Navigation:</strong> Breadcrumb, site haritası gibi tasarımdaki navigasyon elemanları için</li>
<li>Amazon EC2 ve S3 desteği&#8230;</li>
<li>Diğer modüllere bazı ekler ve tabii ki bugfix&#8217;ler</li>
</ul>
<h2>Zend_Tool</h2>
<p>Normalde bir ZF projesi oluşturmak uğraştırıcı bir iş. Genelde benim yaptığım önceden oluşturduğum bir projeden kopyala yapıştır yapıp üzerinde değişiklik yapmak. Ama mutlaka gözden kaçan birşeyler oluyor.</p>
<p>Zend_Tool ile artık şunu yapabileceğiz:</p>
<pre>
> zf create project
</pre>
<p>
Bu komutu verdiğiniz zaman gerekli tüm dizinleri vs. oluşturuyor:
</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">|--</span> application
<span style="color: #339933;">|</span>   <span style="color: #339933;">|--</span> Bootstrap<span style="color: #339933;">.</span>php
<span style="color: #339933;">|</span>   <span style="color: #339933;">|--</span> configs
<span style="color: #339933;">|</span>   <span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> application<span style="color: #339933;">.</span>ini
<span style="color: #339933;">|</span>   <span style="color: #339933;">|--</span> controllers
<span style="color: #339933;">|</span>   <span style="color: #339933;">|</span>   <span style="color: #339933;">|--</span> ErrorController<span style="color: #339933;">.</span>php
<span style="color: #339933;">|</span>   <span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> IndexController<span style="color: #339933;">.</span>php
<span style="color: #339933;">|</span>   <span style="color: #339933;">|--</span> models
<span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> views
<span style="color: #339933;">|</span>       <span style="color: #339933;">|--</span> helpers
<span style="color: #339933;">|</span>       `<span style="color: #339933;">--</span> scripts
<span style="color: #339933;">|</span>           <span style="color: #339933;">|--</span> error
<span style="color: #339933;">|</span>           <span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> error<span style="color: #339933;">.</span>phtml
<span style="color: #339933;">|</span>           `<span style="color: #339933;">--</span> index
<span style="color: #339933;">|</span>               `<span style="color: #339933;">--</span> index<span style="color: #339933;">.</span>phtml
<span style="color: #339933;">|--</span> library
<span style="color: #339933;">|--</span> <span style="color: #000000; font-weight: bold;">public</span>
<span style="color: #339933;">|</span>   <span style="color: #339933;">|--</span> <span style="color: #339933;">.</span>htaccess
<span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> index<span style="color: #339933;">.</span>php
`<span style="color: #339933;">--</span> tests
    <span style="color: #339933;">|--</span> application
    <span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> bootstrap<span style="color: #339933;">.</span>php
    <span style="color: #339933;">|--</span> library
    <span style="color: #339933;">|</span>   `<span style="color: #339933;">--</span> bootstrap<span style="color: #339933;">.</span>php
    `<span style="color: #339933;">--</span> phpunit<span style="color: #339933;">.</span>xml</pre></div></div>

<p>Henüz dokümantasyonu çok boş ve ben de denemedim ama Zend&#8217;in ilgili blogunda bu araç için geliştirmeler yapılacağı yazdığı için muhtemelen eksiklikleri var ama bu haliyle bile işleri oldukça hızlandıracak gibi&#8230;</p>
<p>Bu aracın niye bu kadar geç kaldığı sorusuyla ilgili olarak aklıma gelen ilk cevap Zend&#8217;in editörünü önplana çıkartmak için kasıtlı geciktirmesi. Zira Zend Studio&#8217;da proje bir wizard ile oluşturuluyor ama parasını verip satın alırsanız. PDT ya da piyasadaki diğer editörler için bu imkan yok&#8230;</p>
<h2>Zend_Application</h2>
<p>Yeni proje oluştururken en çok uğraştıran kısım şüphesiz bootstrap dosyası. Ayrıca geliştirme (development), test ve son ürün (production) için farklı konfigürasyon ihtiyacı için halihazırda bir çözüm bulunmuyordu. </p>
<p>Zend_Application ile bu soruna çözüm aranmış sanki. Dokümantasyondan yine her zamanki gibi göz atarak birşey anlamak mümkün değil ama benim anladığım kadarıyla bir konfigürasyon dosyası ile bootstrap dosyasındaki hammaliyelerin birçoğundan kurtulmak mümkün olacak.</p>
<h2>Sonuç</h2>
<p>Ben şahsen ZF&#8217;yi hala bir framework olarak değil de PEAR&#8217;in yerini alan bir kütüphane olarak kullanıyorum. Hala Rails&#8217;in 15 dakikada blog yazma hayallerini kuruyorum ama bu tür gelişmeler ümit veriyor&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2009/04/09/zend-framework-18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hangi PHP Framework&#8217;ü Daha İyi?</title>
		<link>http://www.huysuzadam.com/2009/02/09/hangi-php-frameworku-daha-iyi/</link>
		<comments>http://www.huysuzadam.com/2009/02/09/hangi-php-frameworku-daha-iyi/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 10:12:44 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[frameworkler]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=208</guid>
		<description><![CDATA[Var olan tonla php framework&#8217;lerinden birini seçerken birçok faktörü göz önünde bulundurmak gerek:

Performans ve scalability
Komunite desteği (Yazılımcı ararken ya da takıldığınız noktayı sorarken lazım olacak)
Geliştiren ekibin güvenilirliği (Kullandığınız framework&#8217;ün gelişmesinin durması kabus olacaktır)
Kolay öğrenilebilirlik
Kolay geliştirilebilirlik
Yeterlilik / Esneklik
Sunduğu özellikler
Desteklediği PHP versiyonları
&#8230;


Zend Framework&#8217;ün Felsefesi
Özellikle Ruby on Rails&#8217;den sonra artan framework talebi sonunda birçoğu rails&#8217;den çok ciddi olarak [...]]]></description>
			<content:encoded><![CDATA[<p>Var olan tonla php framework&#8217;lerinden birini seçerken birçok faktörü göz önünde bulundurmak gerek:</p>
<ul>
<li>Performans ve scalability</li>
<li>Komunite desteği (Yazılımcı ararken ya da takıldığınız noktayı sorarken lazım olacak)</li>
<li>Geliştiren ekibin güvenilirliği (Kullandığınız framework&#8217;ün gelişmesinin durması kabus olacaktır)</li>
<li>Kolay öğrenilebilirlik</li>
<li>Kolay geliştirilebilirlik</li>
<li>Yeterlilik / Esneklik</li>
<li>Sunduğu özellikler</li>
<li>Desteklediği PHP versiyonları</li>
<p>&#8230;
</ul>
<p><span id="more-208"></span></p>
<h2>Zend Framework&#8217;ün Felsefesi</h2>
<p>Özellikle Ruby on Rails&#8217;den sonra artan framework talebi sonunda birçoğu rails&#8217;den çok ciddi olarak esinlenen bir sürü framework çıktı. Arkasından Zend mühendisleri de framework ihtiyacına cevap vermek üzere çalışmalara başladı.</p>
<p>Code Igniter, Kohana, CakePHP, Symfony vb. projeler Rails&#8217;in izinden giderken Zend Framework kendine daha farklı bir yol çizdi. Rails ve türevleri tüm yapı için kesin kurallar koyup işe başlamayı hızlandırırken Zend Framework birbirinden bağımsız çalışabilen ama aynı zamanda birbirleriyle &#8220;iletişim kurabilen&#8221; modüller programlamayı tercih ettiler.</p>
<p>Zend Framework modüllerin yalnız başına kullanılabilir olması eski ve benim hala çok güvenemediğim PEAR kütüphanesinin yeniden yazılması ve Zend ile IBM gibi iki devin bu yeni kütüphaneyi (!) desteklemesi gibi yan bir misyonu da tamamlamış oldu.</p>
<p>Ancak bu yapının önemli bir dezavantajı oldu: Karmaşıklık. Yazılım kısmını geçtim, dokümantasyon kısmı çok karmaşık&#8230; Avantajı ise, örneğin konfigürasyon ayarlarınızı farklı bir şekilde tutmanız gerekse örneğin CodeIgniter&#8217;da hiç şansınız yok ama Zend Framework ile sorunsuz&#8230;</p>
<h2>Dokümantasyon Problemi</h2>
<p>Şu an Rails ve izinden giden framework&#8217;lerle birşeyler gerçekleştirmek çok daha kolay çünkü dokümanlarına baktığınızda son uygulamanızda deneyebileceğiniz şekilde anlatılmış vaziyette. ZF dokümanlarında ise hem tüm yapıdan bahsedilmeli hem de modülün tek başına nasıl kullanılabileceği anlatılmalı. Bu da iletişim konusunda zaten kazma olan Zend&#8217;i biraz aşıyor bence.</p>
<p>Sanırım Zend&#8217;in beklentisi komuniteden bu konuda tonla &#8220;tutorial&#8221; ve kitap çıkması idi ama pek de hızlı birşeyler çıktığını söyleyemeyeceğim.</p>
<h2>Alt Framework</h2>
<p>Rails ve türevlerinin yapısı yazılım mühendisliğinde &#8220;tight coupling&#8221; olarak adlandırılırken ZF&#8217;ninki &#8220;loose coupling&#8221; oluyor. Her ne kadar &#8220;loose coupling&#8221; yazılımlarda tercih edilen bir kavram olsa da web framework&#8217;leri için çoğu durumda tight coupling&#8217;in daha uygun olduğunu düşünüyorum. Küçük ve düşük bütçeli yazılımlar için ihtiyacımız olan &#8220;hızlı geliştirme&#8221;, bu da Zend Framework&#8217;ün şu anki haline hiç uymuyor. </p>
<p>Düşününce kapsamlı projeler için ZF, küçük projeler için diğer bir framework kullanmak öğrenme süreci nedeniyle mantıklı gelmiyor. O yüzden bence ihtiyaç olan ZF&#8217;nin bir alt framework&#8217;ünün olması. </p>
<p>Önceki bir yazımda demiştim ki &#8220;Zend Framework on Rails istiyorum!&#8221;<br />
Eğer şu anda Rails tadında işleri çok hızla sizin adınıza yapacak bir yapıya ihtiyacınız varsa Zend Framework&#8217;ü tercih etmek için kendi &#8220;ZF on Rails&#8221;inizi yapmanız gerekiyor.</p>
<ol>
<li>İndir,</li>
<li>zip&#8217;i aç</li>
<li>Konfigürasyonu yap</li>
<li>Controller ve modelleri hızla ekle</li>
<li>Teste aç ve pragmatik programlamaya devam et&#8230;</li>
</ol>
<p>Bu paketin ZF&#8217;nin son versiyonuyla uyumlu olması gerektiğini düşünürsek paketin de sürekli geliştirilmesi gerekecek demektir.<br />
Eh, bu da başlı başına bir framework gibi birşey oluyor.<br />
ZF üzerine inşaa edilmiş bir alt framework&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2009/02/09/hangi-php-frameworku-daha-iyi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend_View_Helper ile Türkçe tarih formatlama</title>
		<link>http://www.huysuzadam.com/2008/07/09/zend_view_helper-ile-turkce-tarih-formatlama/</link>
		<comments>http://www.huysuzadam.com/2008/07/09/zend_view_helper-ile-turkce-tarih-formatlama/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 22:32:16 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[ZF Örnek]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=151</guid>
		<description><![CDATA[Uzun süredir kullandığım, okuduğumuz şekilde tarih gösteren PHP fonksiyonunun helper haline getirilmişini anlatmak istedim bu gece&#8230;
Bu yardımcı ile örneğin 2008-07-08 formatındaki tarihi: &#8220;1 gün önce&#8221; olarak görüntüleyebilirsiniz. Eğer tarih çok eskiyse 3 yıl 8 ay 12 gün sonra gibi gereksiz bir formata dökmemek için &#8220;8 Temmuz 2008&#8243; şeklinde görüntülenecektir.
Şimdi biraz Zend Framework&#8217;teki view helper&#8217;lardan bahsedip [...]]]></description>
			<content:encoded><![CDATA[<p>Uzun süredir kullandığım, okuduğumuz şekilde tarih gösteren PHP fonksiyonunun helper haline getirilmişini anlatmak istedim bu gece&#8230;</p>
<p>Bu yardımcı ile örneğin 2008-07-08 formatındaki tarihi: &#8220;1 gün önce&#8221; olarak görüntüleyebilirsiniz. Eğer tarih çok eskiyse 3 yıl 8 ay 12 gün sonra gibi gereksiz bir formata dökmemek için &#8220;8 Temmuz 2008&#8243; şeklinde görüntülenecektir.</p>
<p>Şimdi biraz Zend Framework&#8217;teki view helper&#8217;lardan bahsedip en sonra da fonksiyonu yazayım.</p>
<p><span id="more-151"></span></p>
<h2>View Helper&#8217;lar Hakkında</h2>
<p>Zend Framework malumunuz Model-View-Controller yapısının bir türevini kullanıyor. Projemizin nasıl sunulduğu (tasarımı) ile ilgili kısım &#8220;View&#8221; kısmı. </p>
<p>View&#8217;fa HTML, CSS, Javascript ve sınırlı php kodu bulunur. View&#8217;da PHP kullanmak makbul değildir, kullanacaklarınız:<br />
if / else cümleleri, döngüler (while, foreach vs.) ve yazıyı formatlayan yardımcı kodlar. İşte bu yardımcı kodlar Zend Framework&#8217;te &#8220;View Helpers&#8221; olarak adlandırılmış.</p>
<p><strong>Basit bir View Helper Nasıl Yazılır?</strong></p>
<p>Aslında doğru dizindeki doğru isimlendirilen her class Zend Framework dispatcher&#8217;ı tarafından bir helper olarak otomatik olarak kullanılır hale getirilir. Bunun için yapmanız gereken:</p>
<p>{proje_kökü}/application/view/helpers dizini altına bir dosya açmak. Örnek olarak biz TarihFormatla.php açalım. Zend Framework&#8217;ün otomatik olarak algılayabilmesi için bu dosyanın içinde Zend_View_Helper_TarihFormatla adında bir class tanımlamamız gerekecek:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Zend_View_Helper_TarihFormatla <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> TarihFormatla <span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>gibi&#8230;</p>
<p><strong>Yazılan Helper Nasıl Kullanılır?</strong></p>
<p>Yardımcı fonksiyonu kullanmak için ilgili şablonda (*.phtml) $this->tarihFormatla($this->data['guncellenme']) şeklinde kullanabilirsiniz. </p>
<p>İlk harf küçük olacak şekilde büyük/küçük harfe duyarlı olduğuna dikkatinizi çekerim.</p>
<h2>Yukarıdakilerin Özeti</h2>
<ol>
<li>View içerisinde $this->tarihFormatla() diye bir helper kullanmak istiyorsunuz,</li>
<li>Helper dosyanızın adı bu fonksiyonun ilk harfi büyük olanı olan TarihFormatla.php olmalı.</li>
<li>Bu dosya içinde oluşturacağınız class&#8217;ın adı için helper&#8217;ınızın başına &#8220;Zend_View_Helper_&#8221; koyacaksınız: Zend_View_Helper_TarihFormatla</li>
<li>Bu class&#8217;ın içinde çalıştırılacak method&#8217;un adı yine helper&#8217;ın adı olmalı: TarihFormatla().</li>
<li>İstiyorsanız class içerisinde yardımcı metotlar kullanabilirsiniz. Prensip olarak bu metotları &#8220;private&#8221; yapmakta yarar var.</li>
</ol>
<h2>Afilli tarih formatlama yardımcısı. Hem de Türkçe!</h2>
<p>Bu aşağıdaki fonksiyonu application/views/helpers/DateFormat.php dosyasına yazmalısınız. Daha sonra phtml dosyaları içerisinde direkt $this->dateFormat($tarih) şeklinde kullanabilirsiniz.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Zend_View_Helper_DateFormat <span style="color: #009900;">&#123;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Tarih formatlama helper'ı
     *
     * @param integer $date timestamp olarak gönderilir. Formatlanacak tarih...
     * @param string $format Sonuç hangi formatta olsun
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> DateFormat<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'datetime'</span><span style="color: #339933;">:</span>
                <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;dd MMMM yyyy, HH:mm&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'date'</span><span style="color: #339933;">:</span>
                <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;dd MMMM yyyy EEEE&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'timeLeft'</span><span style="color: #339933;">:</span>
                <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">timeLeft</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;dd MMMM yyyy EEEE&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$locale</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Locale<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tr_TR'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Date<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">TIMESTAMP</span><span style="color: #339933;">,</span> <span style="color: #000088;">$locale</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$date</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> timeLeft<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$periods</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;saniye&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;dakika&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;saat&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;gün&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;hafta&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ay&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;yıl&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;asır&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$lengths</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;60&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;60&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;24&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;7&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;4.35&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;12&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;10&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$difference</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000088;">$ending</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;önce&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000088;">$difference</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #000088;">$difference</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$ending</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;kaldı&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>       
&nbsp;
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$difference</span> <span style="color: #339933;">&gt;=</span> <span style="color: #000088;">$lengths</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$difference</span> <span style="color: #339933;">/=</span> <span style="color: #000088;">$lengths</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$difference</span> <span style="color: #339933;">=</span> <span style="color: #990000;">round</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$difference</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$difference</span> <span style="color: #006699; font-weight: bold;">$periods</span>[<span style="color: #006699; font-weight: bold;">$j</span>] <span style="color: #006699; font-weight: bold;">$ending</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$text</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2008/07/09/zend_view_helper-ile-turkce-tarih-formatlama/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework&#8217;e giriş ve örnek proje</title>
		<link>http://www.huysuzadam.com/2008/06/11/zend-frameworke-giris-ve-ornek-proje/</link>
		<comments>http://www.huysuzadam.com/2008/06/11/zend-frameworke-giris-ve-ornek-proje/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 11:13:03 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[ZF Örnek]]></category>
		<category><![CDATA[ZF Kurulum]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/2008/06/11/zend-frameworke-giris-ve-ornek-proje/</guid>
		<description><![CDATA[Zend Framework&#8216;ün  dokümanlarını okuyarak hızlı bir başlangıç yapmanız (quickstart) neredeyse  imkansız. Bu nedenle Zend Framework&#8217;e başlamak isteyenler için örnek bir proje  hazırlamaya karar verdim. 
  Hazırladığım  sıkıştırılmış dosyayı açıp web sunucusu ayarlarında yaptıktan sonra çalışan,  basit bir örneğe sahip olacaksınız. Kodlar bir sürü yorumumla dolu, dolayısıyla  kodları okuyarak [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://framework.zend.com/">Zend Framework</a>&#8216;ün  <a href="http://framework.zend.com/docs/quickstart">dokümanlarını</a> okuyarak hızlı bir başlangıç yapmanız (quickstart) neredeyse  imkansız. Bu nedenle Zend Framework&#8217;e başlamak isteyenler için örnek bir proje  hazırlamaya karar verdim. </p>
<p>  Hazırladığım  sıkıştırılmış dosyayı açıp web sunucusu ayarlarında yaptıktan sonra çalışan,  basit bir örneğe sahip olacaksınız. Kodlar bir sürü yorumumla dolu, dolayısıyla  kodları okuyarak birçok şeyi anlayabilirsiniz.</p>
<p>  Baştan şunu belirtmeliyim  ki Zend Framework bana göre kesinlikle acemiler için bir framework değil. Otomasyon  özellikleri de çok zayıf. Eğer <a href="http://www.rubyonrails.org/">Ruby on Rails</a> (RoR) ayarında bir framework arıyorsanız  <a href="http://cakephp.org/">CakePHP</a> ya da <a href="http://codeigniter.com/">CodeIgniter</a>&#8216;ı (CI) takip etmelisiniz.</p>
<p>  Zend Framework&#8217;ün  avantajı tamamen bağımsız kullanılabilen modülleri sayesinde kendi kurallarını  koymak isteyen ustalar için sağlam ve hızlı bir altyapı sunması. Dolayısıyla ZF  kullanılarak Rails, CI ya da CakePHP ayarında bir alt-framework yaratılabilir.</p>
<h2>Örnek Zend Framework Projesi</h2>
<div style="background-color:#FFFFCC; border-top:1px solid #CCCC99; border-bottom:1px solid #CCCC99; padding:8px;">
<table border="0" cellspacing="1" cellpadding="3">
<tr>
<td><a href="http://www.huysuzadam.com/wp-content/uploads/2008/06/zf_ornek_proje.zip">zf_ornek_proje.zip</a></td>
<td>18 kB</td>
<td>(ZF ayrıca indirilip lib altına konmalı)</td>
</tr>
<tr>
<td><a href="http://www.huysuzadam.com/wp-content/uploads/2008/06/zf_ornek_proje_full.zip">zf_ornek_proje_full.zip</a></td>
<td>3.05 MB</td>
<td>(ZF 1.5.2 içerir)</td>
</tr>
</table>
</div>
<p><span id="more-144"></span></p>
<h2>Gereksinimler</h2>
<ol>
<li>Nesne  yönelimli PHP bilgisi olan bir programcı!</li>
<li>Apache  uzmanı olmasa da temel apache konfigürasyonu yapabilecek bir zat-ı muhterem. Bu  zat programcı ile aynı kişi olursa tadından yenmez&#8230;</li>
<li>PHP  5, Apache, MySQL . ZF&#8217;nin php4&#8242;ü desteklemediğini hatırlatırım.</li>
<li>Apache  için <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a></li>
<li>PHP5  için <a href="http://www.php.net/manual/en/book.mysqli.php">mysqli</a> ya da <a href="http://www.php.net/pdo">PDO</a> extension&#8217;ı. Mysql extension&#8217;ı desteklenmiyor. Ben mysqli  kullandım, PDO için <b>application/config.ini</b>&#8216;yi değiştirin.</li>
<li>PHP  ayarlarından <b>short_open_tag</b> : on olarak ayarlanmalıdır. Eğer bu ayarı  yapamıyorsanız <b>application/view/scripts/</b> altındaki dosyalardaki <b><font color="#CC0000">&lt;?=</font></b>  geçen yerleri <b><font color="#CC0000">&lt;?php echo</font></b> ile değiştirmeniz gerekebilir. (Bkz. php.ini)</li>
</ol>
<h2>Notlar</h2>
<ol>
<li>Windows  XP Pro, PHP 5.2.5, Apache 2.2, MySQL 5 kullandım. Farklı  platformlar için yorumlamak size kalmış.</li>
<li>Bu  doküman ZF 1.5.2 için hazırlandı. Yeni versiyonlarda kullanmak isterseniz  mutlaka uyumluluk (compatibility) notlarına göz atın. Yeni versiyonlar çıktığı zaman temel  mantık aynı kalmasına rağmen ufak tefek uygulama farkları olabiliyor.</li>
<li>Internetteki  diğer dokümanlarda dizin adları fark edebilir, özellikle de <b>lib</b> dizini ile <b>public</b>. Bu dizinlerin isimleri çok önemli değil, ancak <b>application</b> dizini ve altındaki isimler  önemli. </li>
<li>Zend  Framework UTF-8 ile çalışılmasını önerir. Ben de öneririm ve örnekler  utf-8&#8242;dir. Kullandığınız editörün utf-8 ile problemi varsa dosyaları bozabilir  bu da türkçe karakter sorunu yaşamanıza neden olabilir.<br clear="all"/>
</li>
</ol>
<h2>Örneği Nasıl Çalıştıracaksınız?</h2>
<ol>
<li>Hazırladığım  zip dosyasını bilgisayarınıza indirin</li>
<li>Webroot  olarak <b>tanımlanmamış </b>bir dizine zip&#8217;i  açın.</li>
<li>Web  sunucusundan <b>public </b>dizinine erişim  sağlayın (alias, vhost ya da documentroot yaparak)</li>
<li>Web  sunucusunda gerekli rewrite tanımlamasını yapın.</li>
<li><b>application</b> dizini altındaki <b>config.ini</b>&#8216;den veritabanı ayarlarını yapın.</li>
<li><b>sql </b>dizini altındaki zftest.sql&#8217;i mysql&#8217;e import edin  ve <b>zftest</b> veritabanına gerekli  yetkileri verin.</li>
</ol>
<h2>Dizin Yapısı</h2>
<pre style="font-family:Consolas, 'DejaVu Sans Mono', 'Courier New'; font-size:12px;">
/application   (Kodlama işlerinizin %99'u bu dizin altında  yapılacak)
  /controllers
  /models
  /views
    /helpers
    /scripts

/lib         (Kütüphaneler burada yer alacak, ZF de  dahil)
  /Zend

/public      (Webroot dizini.  Doğrudan erişilecek dosyalar burada)
  /images
  /css
  /js

/sql         (Örnek veritabanının sql'i burada)
</pre>
<h2>Web Sunucusu Ayarları</h2>
<p>Uygun bir dizin  altında zftest adında bir dizin açın. <br />
  Örneğin benim bilgisayarımda webroot <b>c:\apache\htdocs</b> olarak tanımlı ve ben<b> c:\apache\zftest</b> olarak açmayı tercih ettim. <br />
  Doğrudan htdocs altında açmadığıma  dikkatinizi çekerim! </p>
<p>  Zip dosyasının içeriğini  zftest altına taşıyın, elinizde şu dizinler olacak:</p>
<pre style="font-family:Consolas, 'DejaVu Sans Mono', 'Courier New'; font-size:12px;">
  C:\apache\zftest\application
  C:\apache\zftest\lib
  C:\apache\zftest\public
  C:\apache\zftest\sql
</pre>
<p>  Apache&#8217;nin  ayarlarından zftest projemiz için bir alias tanımlayalım:</p>
<pre style="font-family:Consolas, 'DejaVu Sans Mono', 'Courier New'; font-size:12px;">
alias /zftest  &quot;c:\apache\zftest\public&quot;
&lt;Directory &quot;c:\apache\zftest\public&quot;&gt;
  AllowOverride All
  Order allow,deny
  Allow from all

  RewriteEngine on

  # RewriteBase sadece alias yapıldığı zaman  gerekli.
  # Vhost ya da DocumentRoot'a kurarsanız gerek yok
  RewriteBase /zftest
  RewriteCond %{SCRIPT_FILENAME} !-f
  RewriteCond %{SCRIPT_FILENAME} !-d

  # Adres kısmına ne yazılırsa yazılsın public/index.php handle edecek
  RewriteRule !\.(js|ico|gif|jpg|png|css)$  index.php
&lt;/Directory&gt;
</pre>
<p></p>
<p><b>Notlar</b></p>
<ol>
<li><b>zftest/public</b> yerine <b>zftest</b> dizinini webroot yapsaydık, diğer dizinlerin altındaki dosyalar doğrudan çağırılabilir  ve güvenlik açığı çıkabilirdi. Örneğin <a href="http://localhost/application/config.ini">http://localhost/application/config.ini</a> adresini keşfeden biri veritabanı şifrenizi öğrenebilir.</li>
<li>Alias  oluşturmak benim kişisel tercihim. Birden fazla proje olursa her biri için  alias tanımı yapmak daha kolay olacaktır. Ama arzu ederseniz web sunucunun  DocumentRoot&#8217;unu da c:\apache\zftest\public yapabilirsiniz. Bir başka yöntem de  virtual host tanımlamak olabilir.</li>
</ol>
<h2>Oluşabilecek Muhtelif Hatalar</h2>
<p>Apache&#8217;yi yeniden  başlatıp sunucuya bağlandığınızda izin hatası (forbidden) alırsanız </p>
<ol>
<li><strong>&lt;Directory  &quot;c:\apache\zftest\public&quot;&gt;</strong> kısmındaki dizin yolu ile alias&#8217;ta  verilen dizin yolu aynı olmayabilir.</li>
<li>Apache  ayarlarından <strong>DirectoryIndex</strong> komutu index.php&#8217;yi içermiyor olabilir. Şuna benzer  bir satır olması lazım: <br />
    DirectoryIndex index.html index.php</li>
<li>PHP için <strong>short_open_tags</strong> parametresinin açık olduğundan emin olun&#8230;
</li>
</ol>
<p>Eğer sayfa yerine dizin  yapısını görüyorsanız yine DirectoryIndex komutunda index.php yer almıyor  olabilir.</p>
<p>Rewrite ile ilgili problemlerde mod_rewrite&#8217;ın yüklendiğinden emin olun. Debian sistemlerde a2enmod ile aktif hale getirmeniz gerekebilir.</p>
<p>  <i>Karşılaştığınız  diğer hataları bana iletirseniz buraya eklerim.</i></p>
<h2>Nereden Başlamak lazım?</h2>
<p>Örnek çok basit  bir telefon rehberi. Yeni kayıt ekleyin, silin, güncelleyin. Daha sonra sırasıyla  aşağıdaki dosyaları inceleyerek nasıl çalıştığını anlamaya çalışın. İçerlerine  bol bol yorum (comment) yazdım:</p>
<p>  Public/index.php<br />
  Application/controllers/IndexController.php <br />
  Application/views/scripts/index/index.phtml<br />
  Application/models/Phone.php</p>
<p>  Daha sonra &quot;deneme&quot;  sayfalarına bakabilirsiniz: Model, View ve Controller kısımlarını anlamanızda faydası olacaktır.</p>
<h2>Örnekteki yaklaşım ile ilgili</h2>
<p>Zend Framework;  Rails, CakePHP, CodeIgniter, Django gibi frameworklerin aksine gerekli altyapıyı  sunup çözümleri programcıya bırakan bir yapı. Dolayısıyla aynı problemleri farklı  yöntemlerle çözebilirsiniz. Bu konuda bazı tercihlerim var:</p>
<ol>
<li><b>View ile ilgili:</b> Template sistemlerinde genelde iki türlü yaklaşım  tercih edilir. Biri her template&#8217;ın başına header, sonuna footer koymak; diğeri  ise bir layout belirleyip o layouttaki boşluklara içerik koymak. Her ne kadar  layot yöntemi birçok durum için daha pratik de olsa ben bu örnekte header /  footer yöntemini kullandım.</li>
<li><b>Model ile ilgili:</b> Model&#8217;da Zend_Db_Table kullanmak da bir opsiyon  ancak kişisel görüşüm bu yapının çok kullanışsız olduğu yönünde olduğu için ve  internetteki diğer tüm dokümanlarda zaten Zend_Db_Table ile örnek verildiği  için Zend_Db kullanarak model&#8217;i oluşturmayı tercih ettim.</li>
<li><b>Controller ile ilgili:</b> Birçok benzer örnekte tüm &#8220;controller&#8221;ları kapsayan tanımlamaların nasıl yapılacağına pek değinilmemiş. Bu konuda ben bir &#8220;DefaultController&#8221; kullandım ve diğer controller&#8217;ları DefaultController&#8217;dan extend ettim. Farklı bir yaklaşım olarak &#8220;plug-in&#8221;ler kullanılabilir. DefaultController&#8217;a göz atmayı unutmayın&#8230;</li>
</ol>
<h2>Neler Eksik?</h2>
<p>Bu örnekte proje  geliştirirken sıkça kullanılan bazı gereksinimleri içermedim. Bazılarını basitlikten  ödün vermemek için, bazılarını &#8212; dürüst olmak gerekirse &#8212; tam olarak bilmediğim için, bazılarını ZF dokümanlarından okuyup uygulayabileceğiniz, bazılarını ise  ZF tarafından üretilen çözümlerinden hoşlanmadığım ya da uygulamasından hoşlanmadığım  için&#8230;</p>
<p><b>Eksikler:</b></p>
<ol>
<li>Veri  kontrolleri (Data Validation and Sanitization)</li>
<li>Sayfalandırma  (Pagination)</li>
<li>Layout</li>
<li>Önbellekleme  (Caching)</li>
<li>Birim  testleri (Testing)</li>
<li>Çoklu  dil desteği  (Localization &amp;  Internationalization)</li>
<li>ZF  ile verilen servisler (Services)</li>
<li>Otomatik  form üretimi (Zend_Form)</li>
<li>ORM &#8211;  ActiveRecord Pattern</li>
</ol>
<p>Bu önemli eksiklere  rağmen Zend Framework&#8217;e başlayanlar için işe yarayacağını düşünüyorum.</p>
<p>  Kolay gelsin ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2008/06/11/zend-frameworke-giris-ve-ornek-proje/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
	</channel>
</rss>
