Laravel 5.4 ile Gelecek Yenilikler
Laravel ülkemizde ve dünya genelinde kullanılan en popüler PHP framework’üdür. Açık kaynaklı olmasının yanında gelişmiş yapısıyla web uygulamalarının hızlı şekilde geliştirilmesini sağlamaktadır.
Taylor Otwell, Laracon 2013’de Laravel’in sürüm döngüsünü(Release Cycle) paylaşmıştı. Her yıl Haziran ve Aralık ortasında 2 versiyon yayınlanacak ve LTS versiyonu harici yayınlanan bu sürümlerde 6 ay bug-fix ve bir yıllık güvenlik desteği sağlanacaktı.
Geçtiğimiz günlerde Twitter’dan yaptığı duyuruda sürüm döngüsünün Ocak-Haziran olarak değiştiğini açıkladı. Değişikliğin nedeni Symfony yayınlandıktan sonra geliştirici ekibin daha fazla test süresi kazanması ve sürümlerin yılda bir kez düzenlenen Laracon’a denk getirilmesi(Laravel, Symfony’in bir çok component’ini kullanıyor).
Özetle Aralık ayında beklenen Laravel 5.4 içinde bulunduğumuz Ocak ayında yayınlanacak ve bundan sonra 6 aylık sürüm döngüsüne bir sonraki versiyonun Temmuz ayında yayınlanmasıyla devam edilecek.
Gelin Laravel 5.4’de gelecek yenilikleri beraber inceleyelim;
1- Automatic Facade (On the fly Facades)
Laravel 5.4 ile herhangi bir sınıfımıza[1] aşağıdaki örnekte olduğu gibi on the fly Facade[2] desteği sağlayabiliyoruz.
1- Örnek bir sınıf tanımlaması | 2- Laravel 5.4’de on the fly Facade kullanımı |
(Laravel Facade (Bkz. Static Proxies) ile uygulamamızın container’ında kolay kullanımı olan statik arayüzler sağlıyor. Laravel’in neredeyse her özelliğinde daha anlamlı söz dizimleri(syntax) için Facade desteği var. Kullanımı her ne kadar bildiğimiz statik methodlara benziyor olsa da test edilebilir[3] ve esnek yapıdalar.)
2- Laravel Dusk
Laravel, Symfony’in BrowserKit* component’i ile tarayıcının yaptıklarını simüle ederek, End-to-end(e2e) test yazarken hayatımızı kolaylaştıracak(linke tıkla, form doldur, gönder vb.) yardımcı(helper) methodlar sağlıyordu. Fakat sağlanan bu methodlar uygulamamız Single-page ise JavaScript, Ajax kullanılıyorsa yetersiz kalıyordu. Laravel Dusk bu problemi çözmek üzerine geliştirilen bir araç. Artık Dusk ile Single-page, JS kullanılan uygulamalarımızda form doldurabiliyor, event bekletebiliyor hatta drag-and-drop bile yaptırabiliyoruz.
Laravel Dusk altında Facebook’un Php-webdriver’ını* kullanıyor. Herhangi bir Selenium tarayıcıyla çalışabileceği gibi JDK ve Selenium kurma, ayağa kaldırma zahmetinden bizi kurtarıyor. Başarısız olan testlerimizde bizim için otomatik olarak screenshot çekiyor ve sayfamızın nasıl göründüğüne bakabiliyoruz. Ayrıca sağladığı loginAs methoduyla her defasında Login sayfasına gitmemize gerek kalmadan, kayıtlı kullanıcıların ulaşabileceği sayfalarda testlerimize devam edebiliyoruz.
Not olarak, uygulamanızı 5.3’den 5.4’e upgrade ederken e2e testlerinizin bozulmamasını için Laravel BrowserKit Testing paketi sağlıyor.
3- Laravel Mix
Laravel Elixir, 2014 yılında yayınlanan ve Gulp üzerine yazılmış, dosyalarınızı izleme(file watching), birleştirme(concatenation) vb. özellikler sağlayan bir araçtı.
Laravel 5.4 ile birlikte Elixir üzerinden Gulp desteği kalkarak yerine Webpack desteği geliyor. Ekosisteminde büyük bir değişiklik olacağı için adı da Laravel Mix olarak değişiyor. Kullanım örneği için Jeffrey Way’in GitHub’da paylaştığı uygulamaya göz atabilirsiniz*.
4- Blade Components and Slots
Vue.js’den etkilenen Components ve Slots, Blade şablonlarımızda tekrar eden HTML elementlerinde aşağıdaki örnekte olduğu gibi sonradan kullanılabilirlik sağlıyor. Örnekle ilgili aşağıdaki görüntüyü, üzerine tıklayıp detaylıca inceleyebilirsiniz.
5- Markdown in Your Emails
Laravel 5.4 ile birlikte email şablonlarımıza Markdown desteği geliyor. 5.3’le gelen Mailables, Notifications’ı da kapsayan bu özellik(Artisan’a Mail ve Notification oluştururken –markdown flag’ı eklendi) yukarıda tanıttığım Components and Slots üzerine geliştirilmiş.
Stillendirme konusunda da, hazırladığımız email, gönderilmeden önce CssToInlineStyles‘dan geçiriliyor. Böylece şablonlarımızda inline CSS yazma ihtiyacı duymuyoruz.
Örnek Kullanım:
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
Desteklenen componentler: button, footer, header, layout, message, panel, promotion, subcopy ve table.
Laravel 5.4’de örnek Markdown kullanımı (Görüntüye tıklayıp daha büyük haline göz atabilirsiniz)
6- Route improvements
Laravel’de Route tanımlaması yaparken, İsim(Named Route) veya Middleware eklemek istiyorsak closure sonunda yapabiliyorduk:
Route::get('user/{id}/profile', function ($id) { // })->name('profile');
5.4 ile birlikte fluent API yazıldı. Artık Route tanımlamalarımızı istediğimiz sıralamada yapabiliyoruz:
Route::name('users.index')->middleware('auth')->get('users', function () { // some closure action... });
7- Higher Order Messaging for Collections
5.4 ile birlikte Collections üzerinde High Order Message(Design Pattern) implementasyonu geliyor.
Kod örneğinden bakalım:
$invoices->each(function($invoice) {
$invoice->pay();
});
Artık bu şekilde kullanabiliyoruz:
$invoices->each->pay();
Buradaki yazıdan nereden etkilendiği ve High Order Messaging ile ilgili detayları inceleyebilirsiniz.
8- JSON Based Language Files (JSON tabanlı Çeviriler)
Çok dilli uygulamalar geliştirirken proje büyüdükçe dil dosyalarındaki anahtarların akılda kalması ve yönetilmesi zorlaşıyor. Laravel 5.4’le birlikte çözüm olarak dil dosyalarına JSON desteği geliyor.
__(“Please enter your 4-digit verification number:”)
şeklinde kullanabileceğimiz yeni helper method ile çevirilerimiz
{“Please enter your 4-digit verification number:”: “Lütfen 4 haneli doğrulama kodunuzu girin”}
şeklinde tutuluyor. Çevirilerde JSON tercih edilmesinin nedeni hem insanlar hem programlar tarafından kolayca okunuyor olması.
Ve tabiki dil dosyalarımızı kullanırken parametre gönderebiliyoruz:
__( “Hello :name, you have :unread messages”, ['name' => $user->name, 'unread' => $notifications->count] )
Blade için de yeni bir directive mevcut:
@trans(['name' => $user->name, 'unread' => $notifications->count]) Hello :name, you have :unread messages. @endtrans
Eğer dil dosyası oluşturmamışsak, yukarıda tanımladığımız gibi geliyor: Hello Emir, you have 10 messages.
Henüz 5.4 yayınlanmadığı için yeni özellikler dökümante edilmedi. Ama Laravel’in resmi sitesindeki Güncelleme Kılavuzunda(Upgrade Guide) Authorization ile ilgili bir değişiklik gözüme çarptı. Güncelleme için tahmini zaman şu an için 10 dakika
Güncelleme Klavuzu: https://laravel.com/docs/master/upgrade#upgrade-5.4.0
Yine tekrar etmekte fayda var, Laravel 5.4 henüz yayınlanmadı. Yukarıda sizlerle paylaştığım gönderilen commitler, Twitter ve Laravel News’den derlediklerim.
Kaynaklar:
1- https://twitter.com/taylorotwell
2- https://twitter.com/laravelphp
3- https://github.com/laravel
4- https://laravel-news.com/
Bu yazı Devnot ve Emir Karşıyakalı’nın blogunda yayınlanmıştır.