İçeriğe geç
Muhammet Şafak
Framework & Kütüphane 2 dk okuma

Laravel 11 ile gelen yeni, ince iskelet yapısı

Laravel 11'in sadeleşen iskelet yapısı, kaldırılan varsayılanlar ve bunların günlük geliştirme pratiklerine somut etkisi.


Laravel 11 Mart 2024’te yayımlandı ve getirdiği en belirgin değişiklik teknik bir özellik değildi: skeleton yapısı önemli ölçüde inceltildi. İlk baştaki tepkim — sanırım pek çok Laravel geliştiricisiyle aynı — biraz şaşkınlıktı. Yıllar içinde kasla ezber haline gelen dosya konumları ve kayıt yerleri değişmişti.

Ancak birkaç gün çalışınca şunu fark ettim: bu değişiklik yüzeysel bir yeniden düzenleme değil, framework’ün bir prensip kararı. “Kullanmadığın şey kurulu olmamalı.”

Ne kaldırıldı, ne sadeleşti

Laravel 10 ve öncesinde app/Http/Kernel.php middleware yığını için merkezi bir kayıt noktasıydı. app/Providers/ altında birkaç service provider dosyası sizi karşılıyordu: AppServiceProvider, AuthServiceProvider, EventServiceProvider, RouteServiceProvider. Yeni bir projeye başladığınızda bu dosyalar oradaydı; kullanıyor olsanız da olmasanız da.

Laravel 11 ile bu dosyaların önemli bir kısmı kaldırıldı ya da birleştirildi. Middleware kaydı artık bootstrap/app.php üzerinden daha akışkan bir API ile yapılıyor. AuthServiceProvider ve EventServiceProvider varsayılan olarak gelmiyor; ihtiyaç duyduğunuzda oluşturuyorsunuz.

// bootstrap/app.php — Laravel 11 yaklaşımı
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->append(EnsureTokenIsValid::class);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // özel hata işleme
    })
    ->create();

Eski Kernel.php yolunu biliyorsanız, bu yapı daha az dolaylı geliyor. Her şey tek bir dosyada, zincir halinde okunabiliyor.

app/Models/User.php dışındaki modeller

Model tarafında köklü bir değişiklik yok; ama User.php artık varsayılan olarak daha yalın. Cast tanımları, erişilebilir alan listeleri daha minimal başlıyor. Bence doğru bir karar: başlangıç noktasının ne içerdiğini bilinçli seçmek, “zaten oradaydı” kabullenişinden iyidir.

Tek service provider

Laravel 10’da birden fazla service provider dosyasına dağılmış kayıt işlemleri artık AppServiceProvider tek noktasında yoğunlaşıyor. Event listener’ları oraya, authorization gate’leri oraya ekliyorsunuz.

// app/Providers/AppServiceProvider.php
public function boot(): void
{
    Gate::define('update-event', function (User $user, Event $event) {
        return $user->id === $event->user_id;
    });

    Event::listen(EventCreated::class, SendEventNotification::class);
}

Bu yaklaşım dosya sayısını azaltıyor ama AppServiceProvider’ın şişmesine zemin hazırlıyor. Projeniz büyüdükçe ayrı service provider sınıfları yazmak yine mantıklı; ancak zorunlu olmayan dosyaların baştan gelmemesi iyi bir varsayılan.

Channel ve queue yapılandırmaları

Broadcast channel’lar artık routes/channels.php yerine doğrudan service provider üzerinden ya da ayrı bir dosyada tanımlanabiliyor. Queue bağlantı yapılandırmaları da benzer biçimde basitleşti.

Bu değişiklikler ilk kurulumda bir öğrenme sürtüşmesi yaratıyor; ama altındaki sormak istediği soru şu: “Bu projenin gerçekten neye ihtiyacı var?”

Upgrade deneyimi

Looplio API kısmını Laravel 11’e taşımak için bir gün ayırdım. laravel/upgrade paketi iyi bir başlangıç noktası sağlıyor; breaking change’lerin büyük kısmını listeliyor. Ancak en dikkat edilmesi gereken yer: özel middleware sınıflarının imzası değişti. $request ve $next parametreleri aynı; ancak sınıfın handle() metodunu derlemenin Illuminate namespace’i farklılaştı.

Geçiş şüphesiz bazı sürtüşme yaratıyor, ama sonunda daha az dosya, daha az “bu ne içindi” sorusu. İki hafta sonra zaten yeni yapıya alıştım.

Genel değerlendirme

Laravel 11’in skeleton sadeleşmesi bir özellik değil, bir felsefe kararı. “Sıfır konfigürasyon, sıfır fazlalık” ile “her şey hazır” arasındaki gerilimde framework bir adım birinciye doğru attı.

Küçük projeler için bu muhtemelen birkaç gereksiz dosyayı silinmeden elde etmek demek. Büyük projeler için ise ne koyduğunuzu bilinçli seçme alışkanlığı kazanmak. Her iki durumda da mantıklı.

Etiketler: #Laravel
Paylaş:

İlgili Yazılar

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi