Phalcon Framework Dersleri – 1 / Projeyi Ayağa Kaldırmak
Merhaba arkadaşlar, artık phalcon derslerine bir yerden başlamaya karar verdim :). Phalcon’u güzelce kurduk php.ini’den aktif ettik iyi herşey güzel 🙂 Peki ya sonra ? sonrası malum. Projemizi oluşturmaya başlıyoruz. Vira Bismillah !
Dosya Yapısı
Phalcon uygulama geliştirmek için özel bir dosya yapısını zorunlu kılmaz.Gevşek bağlanmış (Loosely Coupled) olması nedeni ile en rahat bir dosya yapısıyla muazzam uygulamalarınızla Phalcon’u uygulayabilirsiniz.
Benim tercih ettiğim ve Phalcon’un da önerdiği dosya yapısı :
tutorial/ app/ controllers/ models/ views/ public/ css/ img/ js/
Küçük bir not; Uygulamalarınızda Phalcon ile alakalı library klasörüne ihtiyacınız bulunmamakta ! Zira Framework hafıza kullanmanız için zaten hazır.
Şekil URL’ler
Url’lerimizi şekillendirmek SEO için de kullanıcıların daha rahat hatırlaması içinde büyük kolaylık sağlar. Phalcon en popüler web sunucuları tarafından sağlanan rewrite modüllerini destekler. Uygulamanızda kullanıcı dostu url oluşturmak gibi bir gereklilik bulunmamaktadır yine rahat bir şekilde geliştirme yapabilirsiniz.
Bu örnekte Apache için rewrite modülünü kullanacağız. /tutorial/ klasörü içerisinde .htaccess dosyasını oluşturalım ve aşağıda vermiş olduğum rewrite kurallarını belirtelim:
#/tutorial/.htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L] </IfModule>
Böylelikle app dosyası içerisindeki klasörlerimizi güvene almış bulunuyoruz. Gelebilecek istekler public klasörüne yönlendirilecek.
Şimdi de public klasörü altında .htaccess dosyası oluşturuyoruz ve rewrite kurallarımızı belirtiyoruz. Eğer gelen istekte public klasörü altında dizin yada dosya var mı ? yoksa :
#/tutorial/public/.htaccess <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] </IfModule>
Bootstrap
Boostrap dosyası ilk oluştaracağımız dosyadır. Boostrap dosyası oldukça önemli zira uygulamanızı bu dosya üzerinden kontrol edip tüm istekler bu dosyadan ilgili yerlere aktarılır.
tutorial/public/ klasörü içerisinde index.php dosyasını oluşturun. Temel olarak Bootstrap dosyanız şu şekilde olmalı;
<?php try { // Autoloader ayarlanıyor ve set ettiğimiz dizinlerden class'lar otomatik olarak yüklenecek. $loader = new \Phalcon\Loader(); $loader->registerDirs(array( '../app/controllers/', '../app/models/' ))->register(); // Dependency Injection'a daha sonra değineceğiz $di = new Phalcon\DI\FactoryDefault(); // view pathini set ediyoruz. $di->set('view', function(){ $view = new \Phalcon\Mvc\View(); $view->setViewsDir('../app/views/'); return $view; }); // uygulamamızın temel url'ini set ediyoruz. Uygulama içerisinde kullanacağımız Phalcon\Tag class'ında oldukça yararı dokunacaktır :) $di->set('url', function(){ $url = new \Phalcon\Mvc\Url(); $url->setBaseUri('/tutorial/'); return $url; }); // İçeriği alıyoruz. uygulamaladan gelen tüm verileri yazdırmasını söylüyoruz. $application = new \Phalcon\Mvc\Application($di); echo $application->handle()->getContent(); } catch(\Phalcon\Exception $e) { echo "PhalconException: ", $e->getMessage(); // Hata varsa hata mesajını yazdır. }
Autoloaders
Bootstrap içerisinde ilk bölümde autoloader’i kayıt ediyoruz. Bu uygulama içerisinde sınıfları controller ve model olarak otomatik yükleme işlevini görecektir. Uygulamanın esnekliğini arttırmak için daha fazla dizini kayıt edip class’ları autoload edebiliriz. Örneğimizde autoload için Phalcon\Loader bileşenini kullandık.
<?php $loader = new \Phalcon\Loader(); $loader->registerDirs( array( '../app/controllers/', '../app/models/' ) )->register();
<?php class IndexController extends \Phalcon\Mvc\Controller { public function indexAction() { echo "<h1>Hello!</h1>"; } }
Dependency Management
Dependency Injection Tasarım Deseni Phalcon ile çalışırken anlaşılması çok önemli olan bir konudur.Bu kulağa karmaşık gelebilir aslında oldukça çok basit ve pratiktir.
Resimde ne görüyorsunuz diye bir soru sorsam, süpheli süpheli bakmaya mı başlarsınız, yoksa USB anahtarlıklar ve iki anahtar mı dersiniz bilmiyorum. Ama sistematik bir görüntü var aslında resimde. Canı isteyen sistemdeki anahtarlıkları halkadan boşandırıp değiştirebilir. Çünkü halka esnek bir yapıda yani birbirine sabitlenmemiş. Aynı şekilde isteyen, ipliğin ucundaki USB aygıtlarını da istediği renkle değiştirebilir. Çünkü iplikte basit bir düğüm, dolayısıyla anahtarlık ve anahtarlar arasında gevşek bir bağ mevcut. Aynı şekilde USB aygıtlarının kapakları da birbirine uyumlu olduklarından istenen renkte anahtarlık veya kapak seçilebilir ve ikili oluşturulabilir. Bu durum sistemin esnek olduğunu ve tüm bileşenler arasında gevşek bir bağlantı söz konusu olduğunu göstermekdir.
Yazılım tasarım desenlerinde de sıklıkla karşılaştığım “gevşek bağlılık” (Loosely Coupled) deyiminin de ifade etmek istediği şey yukarıdaki şekilde anlatıldığı gibidir. Nesnelerin birbirine uyumlu ve birbirini etkilemeyecek şeklide olmasıdır.
Yazılım tasarım desenlerinden biri olan, Dependency Injection (Bağımlılıkların Dışarıdan Enjekte Edilmesi) deseni de bileşenlerin(components) birbirine olan sıkı bağlarının gevşetilmesini ve yazılımın test edilebilir bir hale getirilmesini amaçlamaktadır. (Teşekkürler)
Controller Oluşturmak
Varsayılan olarak Phalcon’un arayacağı controller ismi Index’tir. Uygulamanın başlangıç noktası burasıdır. Index Controllerı oluşturalım (tutorial/app/controllers/IndexController.php)
<?php class IndexController extends \Phalcon\Mvc\Controller { public function indexAction() { echo "<h1>Hello!</h1>"; } }