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.
Bu yazı 2 yıl önce yazıldı — o günün koşullarını yansıtır.
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. Sanctum’un HasApiTokens trait’i varsayılandan çıktı; cast tanımları da $casts özelliğinden casts() metoduna taşındı. 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 varsayılan olarak gelmiyor; routes/channels.php ve BroadcastServiceProvider iskeletten çıktı, php artisan install:broadcasting çalıştırdığınızda geri geliyor. 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. Resmî upgrade rehberi 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 kaydı değişti. handle() imzası aynı kalıyor; ancak kayıt app/Http/Kernel.php yerine bootstrap/app.php üzerinden yapılıyor, çerçevenin kendi varsayılan middleware sınıfları da Illuminate namespace’ine taşındı.
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ı.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.