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ı.