Son 10 yıl içerisinde PHP’nin ve topluluğunun geldiği noktada çok önemli bir payı olan Laravel’i yeterince övmediğimizi farkettim ve bunun üzerine bu yazıya başlama kararı aldım.
Yazıya başlamadan önce Laravel’in çıktığı yıllardaki ekosistemden ve mevcut durumundan bahsetmeyi düşündüm. Ancak doğrudan Laravel’in neden bugün çok iyi bir konumda olduğundan ve çok sevildiğinden bahsetmek ve frameworkün yeteneklerini aktarmak daha iyi olacaktır.
İşte başlıyoruz…
Şunu söylemekte hiç bir sakınca yok. Laravel, PHP’nin kötü repütasyonunu silen, onu tekrar eski günlerine döndüren, dil değiştirme arefesindeki kişileri tekrar PHP’ye bağlayan frameworktür. Laravel’in yanına sağlam bir altyapı sunan Symfony’i ve game changer olan Composer’ı da dahil edebiliriz.
Geçtiğimiz yıllarda Laravel bir web framework olmaktan öteye geçti, bir ekosistem halini aldı. Neden bu kadar çok sevildi ve büyük bir ekosistem olabilmesinin yolu açıldı sorusunun verilebilecek tek bir yanıtı var: “developer friendly” olması. Yazılım geliştirirken keyif almak, hızlı geliştirme yapmak, problemlere kolay çözümler bulmak ve “sevilmeyen” dayatmaların olmaması bir developer için en önemli konuların başında geliyor. Laravel tam olarak bu konuda ilk günden itibaren açık ara öne çıktı. Peki buna nereden başladı? Dökümantasyon! Evet arkadaşlar, iyi bir dökümantasyon yazılımın her alanında en önemli konulardan birisidir. Laravel dökümantasyonu, teknik özelliklerden ziyade frameworkün yetenekleri ve kullanımı ile ilgili developer friendly bir yaklaşım sergiliyor. Özellikle çıktığı dönemde açık ara bir fark yarattı. Framework yapısını hızlı aktarması, özelliklerin kullanımı ile ilgili kolay bilgiler vermesi insanların çok hızlı adapte olabilmesini sağladı. Yani döküman yazın, hatta document-driven-development yapın diyen insanlar boşa konuşmuyor.
Dökümantasyon son kullanıcıya görünen kısım aslında. Bunun arkasında Laravel’i bu kadar iyi yapan şey, detaylara verdiği önem ve herşeyin minimal olması. Kodu kolay ve hızlı yazmanız için fırsat sağlıyor, bunu teşvik ediyor. Yani burada bir felsefe var.
Laravel yıllar içerisinde ciddi biçimde kabuk değiştirdi. Benim ilk kullandığım 4.2 versiyonu ile 10.x versiyonu arasında ciddi farklar var. Bunun altında yatan sebep bu minimalizm ve sadelik arayışı. İster yazılım ürünü yapın isterseniz bir oyun geliştirin, hedef kitlenizi ne kadar mutlu ederseniz o kadar çok kullanıcı edinirsiniz. Developerı mutlu etmenin yolu ise, kod yazarken herşeyi kolaylaştırmak ve her konuya bir çözüm bulunabilmesi. Dökümantasyon ve felsefe konusunda biraz fazla yazdığımı farkettim. Ama gerçekten bu temel felsefe tüm konuları iyi anlamda etkiliyor.
İşin teknik tarafına indiğimizde, bizi çok güzel özellikler karşılıyor. “Bir web framework’te neler olmalı?” sorusunu biraz irdeleyerek bu özelliklerin neler olduğunu kısa kısa tanıtabiliriz. İyi bir routing yapısı, veritabanı bağlantısı, form yapıları, template motoru, authentication, belki dahili cache yapısı işin başında gelir. Laravel bunların hepsini bize fazlasıyla sağlıyor! Bu yazımda kod örnekleri olmayacak ama her bir konu için dökümantasyonu linklendireceğim. Hızlıca bir göz atarak, herşeyin ne kadar kolay olduğunu siz de görebilirsiniz.
Routing yapısı oldukça basit ve çok fazla özellik barındırıyor. Çok kolay biçimde url yapısını tüm detaylarıyla oluşturabiliyorsunuz. Bunu pek tabii controller mimarisi ve Blade template motoru takip ediyor. HTTP Kernel içerisinde dahili gelen Middleware yapısı, birçok konuyu önden kurgulamanızı ve çözmenizi sağlıyor. Veritabanı kısmında ise Eloquent ORM -abartarak söylüyorum- en iyi active record uygulamalarından bir tanesi. Sınırsız sayıda özelliği olduğuna yemin edebilirim ama ispat edemem (Matematik mezunu olduğum için). Eloquent ORM’i çok basit bir Migration yapısı destekliyor. Böylece veritabanı değişikliklerini de güzelce gerçekleştirebiliyor ve takip edebiliyorsunuz.
Laravel Authentication, şu ana kadar kullandığım en basit sistem olabilir. İster session ile olsun, ister stateless; çok kolay biçimde bunları sağlayabiliyorsunuz. Hazır session demişken, Session ve Cookie yönetimi için de çok basit kullanımları mevcut. Session ve cookie default olarak Encryption kütüphanesinden destek alıyor ve güvenlik konusunda birçok şeyi baştan hallediyor. Encryption kütüphanesini sistemin genelinde kullanabiliyorsunuz. İsterseniz URL yapısında encryption kullanın, isterseniz veritabanındaki verilerinizde. Sadece birkaç satır kod ile kolayca bunu sağlayabilirsiniz. Eloquent için encrpytion uygulayacağınız kolon için “encrypted” castingi uygulamanız yeterli olacaktır. Authentication tarafına dönecek olursak, API geliştirenler için basitçe Passport ile OAuth2 entegrasyonu yapabilirsiniz. Yok, OAuth2 bizim için fazla olur derseniz, Sanctum ile kolayca API Token kullanabilir hale geliyorsunuz. Socialite paketiyle Google, Facebook gibi birçok login yöntemini kolayca entegre edebiliyorsunuz. Özellikle startuplar için hızlı bir şekilde entegrasyonlar yapmanın ne kadar önemli olduğunu tahmin edebiliyorsunuzdur.
Authentication ile Authorization bölünmez bir bütündür bence. Laravel bunu temelden sağlıyor ve Authorization’u çok önemli bir noktaya yerleştiriyor. Çok kolay ve kullanışlı olduğunu söylememe gerek yok. Frameworkteki tüm sistemlerle kolayca entegre edilebiliyor. Middleware, controller, form request nerede kullandığınız hiç farketmez. Form request demişken… Request yapısına kolayca dahil edilebilen mükemmel ve bir diğer sonsuz özellikli Validation kütüphanesine mutlaka bir göz atın. Farklı bir framework kullanıyorsanız eğer eminim bu basitliği isteyeceksinizdir.
Yine çok güçlü bir Cache kütüphanesi framework içerisinde geliyor. E-mail gönderimleri ise inanılmaz kolay. E-mailleri “Notification” olarak kurgulayıp, çok daha fazla yetenek kazandırabiliyorsunuz. Örneğin bir e-mail gönderirken yanında bir push notification gönderebiliyor ya da Slack’e bir mesaj yazdırabiliyorsunuz. Tabi e-mail olmak zorunda değil, doğrudan bir notification kurgulayıp farklı farklı kanallara bunu farklı kurallarda gönderebiliyorsunuz. Storage tarafı da çok güçlü. Filesystem, AWS, Azure vb. hiç farketmez, dosyalarınızı yükleme ve erişim işlemi çok kolay. Dahili olarak signed-url destekliyor. Tüm bu ayarları Config yapısı içerisinde yapabiliyorsunuz. .env
kullanımı default olarak geliyor.
Sistemde dahili olarak gelen Queue yapısı, işleri asenkron olarak çalıştırmanıza olanak sağlıyor. Bu yapı da Redis, SQS, Beanstalk, Rabbitmq gibi aracılarla kolayca çalışabiliyor. Bunun üzerine daha önce Laravel Türkiye’de detaylı bir sunum yapmıştım, şuradan izleyebilirsiniz: https://www.youtube.com/watch?v=PfiVaxZMXUI
Test yazmak genelde yazılımcıların ötelediği bir konu fakat Laravel bu ortamı yine elegant bir biçimde bize sağlıyor. İster unit test, ister functional test, ister browser test yazın; yazmamak için tek bahaneniz istememiş olmanızdır. Çiçek gibi testler yazacaksınız 🌸
Daha anlatacak çok özellik var aslında. Her bir başlık altında da onlarca anlatılabilecek konu var. Direkt Laravel tarafından sağlanan ve işleri kolaylaştıran birçok paket ve özellik var. Bu konuları sonraki yazılarda değinmek için üzere bırakıyorum. Console application yapısı, debugging için sağlanan araçlar, local geliştirme ortamları, starter kitler, frontend tarafındaki işleri kolaylaştırıcı kütüphaneler… Hepsi framework tarafından size hazır olarak sağlanıyor. İşte bu yüzden yazının başında bir web framework’ten daha fazlası dedim.
Yazıyı bitirirken, tüm bunların altında güçlü bir Service Container yapısı ve Event Listener mimarisi olduğunu da belirteyim. Bir sonraki yazıda kalan kısımlara biraz daha eğileceğim ve burada bahsettiğim konuları daha da detaylandıracağım.
Neden Laravel çok sevildi sorusunun yanıtı bu anlattığım konularda gizli. Hem developer friendly hem de ihtiyacınız olabilecek herşeyi kendi içerisinde çözüyor. Çözmediği noktada çok büyük bir topluluk desteği var. Laravel övülmeyi sonuna kadar hakediyor.
Bazı Notlar:
- Bu yazı üzerine Laravel Türkiye topluluğundan tanıdığım Emre Dipi ile konuşurken, daha önce buna benzer bir yazı yazdığını belirtti. 2020 yılının sonlarına doğru yazdığı yazıyı şuraya iliştiriyorum: https://spider.web.tr/post/80_neden-laravel
2 yazı arasında benzerlikler var. En önemli konu, ikimizin de “kolay öğrenme” ve dökümantasyon konularını ön plana çıkartması. Göz atmaya değer bir yazı.