Frameworkler, uygulama geliştirirken kullanılabilecek sınıfları, eklentileri ve fonksiyonları barındıran, yazılımcıya düzenli bir yapı sunan uygulama çatılarıdır. PHP için yazılmış irili, ufaklı pek çok framework bulunmaktadır ve günümüzde her yazılımcı en az bir tanesi ile haşır neşir olmalıdır. Ben de özellikle MVC kavramına yabancı olan arkadaşların yapıyı anlamalarına yardımcı olmak hem de küçük frameworklere bir alternatif olarak Titan'ı geliştirdim.

Titan, MVC yapısı ile geliştirilen, basit kullanımlı ve küçük bir PHP çatısıdır. 

http://github.com/tkaratug/titan-mvc

Gereksinimler

- PHP 5.4 veya üzeri,
- MySQL 4.1.2 veya üzeri,
- Apache Mod Rewrite modülü.

Download

$ git clone git://github.com/tkaratug/titan-mvc

Kurulum

- Dosyaları indirin ve sunucunuza yükleyin.

Titan, yapı olarak Codeigniter'a benzer fakat küçük bir çatı olduğu için ondaki yeteneklerin hepsine sahip değildir. Bu yüzden Codeigniter kullanmış olanlar kolaylıkla adapte olacaklardır.

Dizin Yapısı

MVC tasarım deseni ile geliştirilen frameworkün dizin ve dosya yapısı aşağıdaki gibidir. Uygulama dosyalarınız '/app' dizini içerisinde olmalıdır. Css ve javascript dosyalarınız, görselleriniz ve diğer multimedia araçlarınız ise '/public' dizini içerisinde yer almalıdır.

|_ app/
|  |_ config/
|  |_ controllers/
|  |_ core/
|  |_ helpers/
|  |_ models/
|  |_ plugins/
|  |_ views/
|     |_ errors/
|_ public/
|  |_ css/
|  |_ images/
|  |_ js/

URL Yapısı

http://siteadi.com/controller/method/parametre

Controllers

Controller'lar, Model ile View arasında köprü görevi görürler. View üzerinden gelen verileri işleyip modele gönderip, model'den dönen sonucu da tekrar view'a göndererek kullanıcıya ulaştırırlar. '/app/controllers' dizini içerisinde yer alırlar ve dosya isimleri mutlaka büyük harfle başlamalıdır.

Örnek Controller: (Ornek.php)

class Ornek extends Controller
{
  function __construct()
  {
    parent::__construct();
  }
 
  public function index()
  {
    echo 'Merhaba Dünya!';
  }
}

Yukarıdaki kod http://siteadi.com/ornek adresinde çalışacak ve sayfaya "Merhaba Dünya!" çıktısını basacaktır.

Views

View'lar web sayfasının ön yüzünü oluşturan html, css ve javascript kodlarını barındırırlar. '/app/views' dizini içerisinde yer alırlar ve controller tarafından yüklenirler. 

Örnek View: (ornek_view.php)

<html>
 <head>
  <title>Titan MVC</title>
 </head>
 <body>
  <h1>Merhaba Dünya!</h1>
 </body>
</html>

Yukarıda oluşturulan view, controller tarafından yüklenerek aşağıdaki gibi çalıştırılır;

class Ornek extends Controller
{
  function __construct()
  {
    parent::__construct();
  }
 
  public function index()
  {
    $this->load->view('ornek_view');
  }
}

Ek olarak controller içerisinde tanımlanan her türlü değişken view'a gönderilebilir ve orada kullanılabilir. Bunun için bir dizi tanımlanıp, view'a aktarılmak istenen veriler bu diziye eklenir. Daha sonra dizi, view yükleyicisine parametre olarak verilir;

$data['key'] = 'Değer';
$this->load->view('ornek_view', $data);

Gönderilen veri, view içerisinde aşağıdaki gibi kullanılabilir;

<?php echo $key; ?>

Models

Model dosyaları Titan içerisinde, database sorguları yapılmasını sağlar. PHP'deki PDO objesinden türetilen Model objesini kullanırlar. Aşağıda örnek bir model dosyası içeriği görebilirsiniz;

class Ornek_model extends Model
{
  function ornekMethod($id)
  {
    return self::getRow("SELECT * FROM ornek_tablo WHERE id=?", array($id));
  }
}

Model'ler controller tarafından aşağıdaki gibi yüklenirler.

$model = $this->load->model('Ornek_model');
$model->ornekMethod(3);

Model'ler ile çalışırken '/config' dizininde bulunan 'config.php' dosyası üzerinde, database bağlantısı için gerekli ayarlamalar yapılmalıdır.

Model objesi olarak, Musa AVCI tarafından yazılmış olan PDO MySQL sınıfını kullandım. Sorgu yapılarını ilgili makaleden inceleyebilirsiniz.
http://www.phpr.org/pdo-mysql-veritabani-sinifi/

Helpers & Plugins

Titan bünyesinde Helpers ve Plugins olmak üzere iki tip yardımcı kaynak bulunur.

- Helpers dosyaları '/app/helpers' dizini içerisinde bulunularlar ve php fonksiyonları barındırırlar.
- Plugins dosyaları '/app/plugins' dizini içerisinde bulunurlar ve yardımcı sınıfları barındırırlar.

Titan üzerinde mevcut olarak Input ve Session pluginleri bulunuyor. Input plugini, form verilerini yönetme imkanı sunarken, Session plugini oturum yönetimi sağlıyor. Siz de kullanacağınız yardımcı sınıf ve fonksiyonları ilgili dizinlere atarak sisteme dahil edebilirsiniz.

Helpers ve Plugins dosyalarını kullanmak için controller üzerinde yüklemek gerekir. Aşağıda helper ve plugin yüklemelerini görebilirsiniz;

// Helper Yükleme
$this->load->helper('ornek_helper');

// Plugin Yükleme
$ornek_plugin = $this->load->plugin('Ornek');

Sistem çalışırken otomatikman yüklenmesi istenen helper ve plugin dosyaları, '/app/config/' dizininde bulunan 'config.php' dosyası içinde, birden fazla ise aralarına virgül konarak tanımlanabilirler.

/app/config/config.php:

// Autoload Helpers
$config['helpers'] = ['ornek_helper'];

// Autoload Plugins
$config['helpers'] = ['ornek_plugin', 'ornek_plugin_2'];

Destek

Framework ile ilgili sorularınızı, görüşlerinizi ve önerilerinizi konu altında yorum yazarak ya da e-posta adresimden bana iletebilirsiniz. Bunu yaparken amacımın basit bir MVC katmanı oluşturmak olduğunu unutmamanızı rica ediyorum.