Symfony 2.0 sürümünden bu yana alışılagelen Symfony yapısının yerini, Symfony Flex eklentisi ile birlikte, eskisinden tamamen farklı bir yapı alıyor. Geliştirme adına işler kolaylaşsa da, yapılan radikal değişiklikler haliyle Symfony ile proje geliştiren yazılımcılar üzerinde çok fazla handikap yaratıyor. Yeni yapıyı tanımak ve yeni konsol komutlarını öğrenmek bir yana dursun, Symfony 2 sürümleriyle yazılan bir proje Symfony 4.0 sürümüne yükseltilemeyeceğinden, eski projeyi ve yeni başlanan farklı bir projeyi birlikte yürütmek ekstra zaman ve odaklanma gerektirecektir. Bir diğer handikap ise yıllardır third party olarak geliştirilen Symfony 2 paketlerinin, Symfony 4.0 ile yaşayacağı uyum sorunu.
Symfony 4.0 sürümüne radikal bir şekilde geçilirken, üzerinde fazla durulmayan Symfony 3.0 sürümüne ne oldu diyebilirsiniz. Symfony’nin mimarı Fabien Potencier’e göre Symfony 3.0 sıkıcıydı. Symfony 2.8 sürümünün kullanılmayan özelliklerinden arındırılmış haliydi:
“Symfony 3.0 = Symfony 2.8 (-) deprecated features”
Symfony 4.0 ile ise farklı bir yola giriliyor:
“Symfony 4.0 = Symfony 3.4 (-) deprecated features + a new way to develop applications”
Ayrıca Symfony 4.0, PHP 5.6’nın hızını üçe katlayan PHP 7’ye ihtiyaç duyuyor.
SensioLabs firması, Symfony 2.8 sürümü için hata düzeltme desteğini Kasım 2018’e kadar, güvenlik desteğini ise Kasım 2019’a kadar sürdürecek olsa da, yeni bir projeye start vermek isteyenlere http://symfony.com/download adresinde, yeni versiyonunu seçmelerini öneriyor. Symfony Flex yapısını içeren öncü sürüm olan 3.4 ise long term support olarak 4.0 ile birlikte, Aralık 2017 itibariyle indirilebilir durumdadır.
Symfony Flex
Symfony 3.3 ve 3.4 sürümlerinde opsiyon olarak sunulan Symfony Flex, Yeni sürüm itibari ile artık ön tanımlı olarak sunulmaktadır. Symfony Flex, uygulamalarınızı kolaylıkla geliştirmenizi ve eklentilerinizi başınız ağrımadan yönetebilmenizi sağlayan bir composer eklentisidir. Önceki Symfony sürümlerinde yeni bir Bundle eklemek ya da gerek duyulmayan bir Bundle’ı silmek oldukça zahmetliydi. Composer aracı ile projenize yeni bir bundle eklemeniz ise tek başına yeterli değildi. Yeni eklediğiniz Bundle’ı Application Kernel içerisinde tanımlamanız, routing belirleyip gerektiğinde ekstra ayarlar da yapmanız gerekiyordu. Symfony Flex, projenize Symfony Recipes Server’dan indirdiği third party paketlere ait entegrasyonları sizin için otomatik olarak yapmaktadır. Yapmanız gereken tek şey, gerek duyduğunuz paket ismini require olarak belitmenizdir.
Symfony Recipe Server
İçerisinde 3000’den fazla third party bundle bulunan, yaklaşık 9000 geliştiricinin yer aldığı KnpBundles topluluğunu Symfony 2 ile geliştirme yapmış her php developer bilir. Symfony 4.0 için benzer oluşum Symfony Recipe Server adıyla artık symfony.sh adresinde yer almaktadır. FOS User Bundle gibi yaygın kullanılan Symfony 2 paketleri, Symfony 4 ile uyumlu hale getirildiğinde Symfony Recipe Server’da yerlerini alacaktır.
Hafiflik
Projeniz başlangıçta en boş halde gelir. Veritabanı işlemleri için kullanılan Doctrine, Propel gibi ORM araçlarından tutun, Symfony ile birlikte anılan template motoru Twig bile artık Symfony iskeleti içerisinde gelmemektedir. Bu nedenle Symfony iskeletini indirdiğinizde, toplamı 10 mb’ın altında bir proje yapısına sahip oluyorsunuz. Buradaki amaç olabildiğince sade ve hafif olmaktır. Veritabanı işlemleri yer almayacak bir projede ORM aracına gerek duyulmadığı gibi, sadece HTTP yanıtları dönen ve kullanıcı arayüzüne sahip olmayan bir web servis için Twig dosyalarına ihtiyaç olmayacaktır.
Performans
PHP 7 ve üzeri için tasarlandı. Desteklenmeyen fonksiyon ve özelliklerden arındırıldı. Symfony Flex ile geliştirici dostu yeni bir yaklaşıma geçti. Yükünü, başlangıçta ihtiyaç duymadığı bağımlılıklarını bünyesinden attı. http://www.phpbenchmarks.com/en testlerinde tüm zamanların en hızlı Symfony sürümü olurken, popüler bir geliştirme çatısını olan Laravel 5.5 sürümünden neredeyse üç kat daha hızlı bir geliştirme çatısı haline geldi.
Sizlerle hakkındaki şahsi izlenimlerimi paylaştım. Umarım yeni projelerden daha çok keyif alır ve hep birlikte hedeflerimize ulaşırız.