Symfony, Fabien Potencier tarafından, 22 Ekim 2005'te ilk sürümü ile kullanıcıların beğenisine sunulmuş, SensioLabs ve kendi açık kaynak topluluğu tarafından geliştirilen bir PHP framework'tür (PHP yapı iskeleti). Drupal, phpBB, Joomla! gibi çeşitli site geliştirme araçlarında ve Yahoo! Answers, Vogue Fransa gibi popüler web sitelerini oluşturmak için Symfony bileşenleri kullanılmıştır. Geçtiğimiz sene Kasım ayında 3.0.0 sürümünü kullanıcılarına tanıtmıştır ve günümüzde de PHP için geliştirilmiş gözde framework'ler arasındaki yerini korumaktadır.

Symfony'nin genel çalışma mantığı gelen bir talebin framework çekirdeği içinde işlenmesi, uygun adresle eşleştirilmesi ve eşleşen adrese göre bir Bundle'a (demet) yönlendirilmesidir. Bundle ise Symfony'de herhangi bir uygulama mantığı içeren (taleplerden cevap üretebilen) bütün klasörlere verilen isimdir. Symfony'de sıfırdan yazılabildiği gibi başka platformlar için hedeflenen bazı kütüphaneleri Symfony'de çalışacak hale getirebilecek Bundle'lar da vardır. Bundle'lar temel olarak kendi ayarlarını (yönlendirme vb. işler için), kendi denetleyicilerini (controller) ve kendi görünümlerini (view) barındırırlar. Buna göre Symfony kullanan her uygulama bir Bundle olmak zorundadır. Symfony, kendi temel bileşenlerinin haricinde diğer kütüphanelerden uyarlanmış birçok temel Bundle'ı öntanımlı olarak bünyesinde barındırmaktadır. Bu Bundle'lardan öne çıkanlar:

  • Doctrine: Birçok kütüphanenin bir araya getirildiği bir proje olan Doctrine'in Symfony'e uyarlanmış bazı kütüphanelerinden oluşan Bundle'dır. İçindeki kütüphanelerden öne çıkan ikisi, veritabanlarında gerçekleştirilen işlemleri nesne yönelimli programlanabilir hale getiren DBAL (DataBase Abstraction Layer) (Veritabanı Soyutlama Katmanı) ve DBAL üzerine kurulu veritabanlarına kayıtlı bütün girişleri sınıflar ve nesneler olarak eşleştirip, iç mekanizmaları soyutlayan ORM (Object-Relational Mapper) (Nesne-İlişkisel Eşleyici)'dir.

  • Twig: Aslen Armin Ronacher tarafından bir blog platformu için geliştirilen Twig, Symfony geliştirilirken yapılan aramalar sonucunda yeniden keşfedilen bir şablon motorudur (template engine). Django'nun şablon motoruyla çok fazla benzerlik göstermekte; PHP sınıflarıyla şablon kalıtımı, otomatik auto-escaping gibi birçok özelliği içinde barındırmaktadır. Ayrıca bütün bileşenlerinin tekrar yazılabilmesi de geliştiriciye eksikliğini hissettiği birçok özelliği ekleme fırsatı tanımaktadır.

  • Swiftmailer: Symfony'de kullanılması için tasarlanmış e-mail işlemlerini gerçekleştirmek için geliştirilmiştir.

  • Monolog: Jordi Boggiano tarafından kayıt günlüğü tutmak için geliştirilmiştir.

Her ne kadar birçok geliştirici Symfony'i bir MVC framework'ü olarak görse de kurucusu, Symfony'nin sadece bir HTTP Talep/Cevap (Request/Response) framework'ü olduğunu ve en önemli özelliğinin birçok bileşenden oluşması sayesinde kodunun geliştirilirken bütün bileşenlerin baştan yazılması yerine varolan kütüphanelerin Symfony'de kullanıma uyarlanması olduğunu belirtir. Bu yüzden bu kütüphanelerin hepsi ayrı ayrı olarak indirilebilir ve Symfony harici projelerde kullanılabilir. Bu kütüphaneler component (bileşen) olarak adlandırılmaktadır. Symfony de aslında birçok bileşenin birbirine uyarlanması ile oluşturulmuş bir framework'tür. Bazı temel Symfony bileşenlerinden bahsetmemiz gerekirse:

  • HttpFoundation: HTTP talep ve cevaplarını nesne yönelimli programlamaya uyarlamak ve HTTP üzerinde gerçekleştiren birçok işi (çerez yönetimi, cevap başlıkları vb.) soyutlamak için gerekli bileşenleri içerir.

  • Routing: Talep edilen adreslerin uygun denetleyicilere, uygun parametreler ve kontrollerle eşleştirilmesini sağlar.

  • Forms: Kullanılan formların diğer Symfony bileşenleri ile uyumlu çalışmasını, CSRF korunması için denetlemelerin ve formdan gelen verilerin geçerliliğin test edilmesini sağlar.

  • Validator: Farklı veri türleri için kurallar tanımlanmasını ve bu verilerin tanımlanmış kurallara uygun olup olmadığının test edilmesini sağlar (Mesela bir dosya adının sisteme uygun olup olmadığını kontrol etmek için kullanılabilir.)

  • Templating: Şablon(template) dosyalarının farklı motorlar kullanarak derlenmesini sağlar. Buna göre bir projede hem twig, hem PHP'nin kendi derleyicisi, hem de geliştiricinin kendi yazdığı bir derleyici kullanılabilir.

  • Security: Bir projedeki güvenlik ile ilgili birçok sorunun çözümünü barındıran altbileşenler içeren bir pakettir. Bu altbileşenler kullanıcı onaylanması ve yetkilendirilmesi, şifrelerin depolanması gibi birçok alanda güvenlik sağlar.

  • Translation: Bir projedeki bütün bileşenlerin barındırdığı metinlerin başka dillere çevrilmesini sağlar.

Symfony’nin Bundle’lardan oluşan yapısı öğrenim süreci için bazı kullanıcılar tarafından eleştiriliyor olsa da, dinamik bir topluluğu bulunması ve sistemler için özel olarak dönüştürülebilir ve genişletilebilir yapısı onu diğer rakiplerinden ön plana çıkarmakta. Gelecekte geliştircilerin hayatında bu framework’ün veya bileşenlerinin ne gibi değişimlerle karşımıza çıkacağını bize zaman gösterecek.

Kaynakça: