Laravel 5.6 ve Gelen Yenilikler

Güncellemeye değip değmemesi hakkında da yorumları aktaracağım...



4 dakikalık okuma
February 9, 2018

7 Şubat 2018 tarihinde Laracon konferansında Laravel 5.6 sürümü tanıtıldı. Lansmana maalesef fiziki olarak katılamadım. İnternet üzerinden yayının yapan live stream’i izleme fırsatı da bulamadım. Her ikiside ücretli; ama benim izleyememe bahanem para değil. Ufak bir ameliyat geçirmemden dolayı biraz istirahatteydim.

Laravel 5.6 ile bazı güzel özellikler geldi. Bunları inceleyelim:

Laravel’in mevcut Sistem Günlüğü (Logging) Mekanizması daha da Geliştirildi:

Daha önce sistem günlüğü dediğimiz logging ayar dosyası config/app.php içerisindeydi. Buradan alınarak yeni bir ad altında config/logging.php dosyasına taşındı.

“Channel”lar oluşturarak artık hata mesajlarını birden fazla handler’a iletebiliyoruz. Mesela tüm debug mesajlarını mevcut olan sistem günlüğüne hata mesajlarını da Slack’a iletebiliriz.

Örnek Konfigurasyon Dosya İçeriği:

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'],
    ],

    'syslog' => [
        'driver' => 'syslog',
        'level' => 'debug',
    ],

    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'username' => 'Laravel Log',
        'emoji' => ':boom:',
        'level' => 'critical',
    ],
],

Örnek kullanım:

Log::debug('An informational message.');
Log::channel('slack')->info('Something happened!');
Log::stack(['single', 'slack'])->info('Something happened!');

İsterseniz de siz kendinize özelleştirilmiş bir kanal oluşturup kendi mantığınızı hazırlayabilirsiniz. Şöyle:

'channels' => [
    'custom' => [
        'driver' => 'custom',
        'via' => App\Logging\CreateCustomLogger::class,
    ],
],

Burada dikkat etmeniz gereken şey, sınıfınızı oluşturduktan sonra __invoke adında bir metod oluşturup return değeri Monolog instance olması gerek. Buna dikkat edeceksiniz sadece. Şöyle:

<?php

namespace App\Logging;

use Monolog\Logger;

class CreateCustomLogger
{
    /**
     * Create a custom Monolog instance.
     *
     * @param  array  $config
     * @return \Monolog\Logger
     */
    public function __invoke(array $config)
    {
        return new Logger(...);
    }
}

Single Server Task Scheduling

Eğer birden fazla sunucuda çalışan zamanlanmış görevleriniz varsa bunların tek bir sunucuda çalışmasını sağlayabilirsiniz. Şöyle:

$schedule->command('report:mail’)
    ->mondays()
    ->at('14:00')
    ->onOneServer();

Not: Tek sunucuda çalışan zamanlanmış görevler için Memcached ya da Redis kullanılması gerekir.

Dynamic Rate Limiting

Genelde API isteklerinde kullanılan istek sınırlaması artık daha dinamik.

Laravel 5.5’de şöyle yapıyorduk:

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

Buradaki problem, Dakikada 60 request isteği sınırlamasını doğrudan statik olarak 60,1 diye yazıyorduk.

Laravel 5.6 ile şöyle yapabiliyoruz:

Route::middleware('auth:api', 'throttle:rate_limit,1’)
    ->group(function () {
        Route::get('/user', function () {
            //
        });
    });

Böylece kullanıcı modelindeki özelliğe göre dinamik olarak değiştirebiliyor.

Broadcast Channel Sınıfları

Artık Channel Classeslarını Clousure yerine routes/channels.php dosyasından kullanabiliyoruz.

Yeni bir kanal oluşturmak için de Laravel 5.6 CLI’da şöyle bir komut geldi:

php artisan make:channel OrderChannel

Kanalını oluşturduktan sonra da routes/channels.php dosyasına şu şekilde kaydımızı yapıyoruz:

use App\Broadcasting\OrderChannel;
Broadcast::channel('order.{order}', OrderChannel::class);

API Controller Generation

php artisan make:controller API/PhotoController --api

“—api” flagı ile gereksiz kodlardan arındırılmış API için hızlı resource controller’lar oluşturabiliyoruz.

Eloquent Date Casting

Eloquent modelimizde bulunan date ve datetime alanlarının tarih formatlarını kendimize göre özelleştirebiliyoruz. Şöyle:

protected $casts = [
    'birthday' => 'date:Y-m-d',
    'joined_at' => 'datetime:Y-m-d H:00',
];

Mesela bir api hazırladık ve API’de doğum tarihlerini istemciye vereceğiz. Eğer burada formatı datetime:Y-m-d H:00 yaparsak, veritabanından doğum tarihini çeker sonra istediğimiz formata ayarlar ve istemciye öyle gönderir.

Blade Component Aliases

resources/views/components/alert.blade.php adında bir alert birleşeni oluşturup kaydedelim. Şimdi bu birleşenimize Blade şablonlarda kullanabilmek için bir takma ad oluşturmayı hızlıca şu şekilde yapabiliyoruz artık:

Blade::component(‘components.alert’, ‘alert’);

Şablon içerisinde de şu şekilde kullanabiliriz:

@component('alert')
    <p>This is an alert component</p>
@endcomponent

Bootsrap 4

Laravel 5.6, Bootsrap 3 yerine artık Bootsrap 4 CSS çatısı ile geliyor.

Symfony 4

Symfony 3 yerine artık Symfony 4 modülleri kullanılmaya başlandı Laravel 5.6 ile.

Laravel 5.5 kullanıcılarının 5.6 ya gerçmesi mantıklı mı ?

Bu tamamen uğraştığınız projeye bağlı. Çünkü Laravel 5.5 Long Term Support veriyor yani 2020’ye kadar uzun dönem desteği. Fakat 5.6’da bu destek daha kısıtlı. Sadece bunu göz ardı edersek elbette değer. İlk başta tüm altyapısı Symfony 4 birşelenlerini kullanmaya başlayacak ve yukarıda bahsettiğim üretkenliğimizi artıracak belli başlı güzel özellikler eklenmiş vaziyette.


Etiketler: