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

- Yayın: 2024-03-03
- Güncelleme: 2026-10-07
- Kategori: Framework & Kütüphane
- Etiketler: Laravel
- Okuma süresi: 3 dk okuma
- Kaynak: https://muhammetsafak.com/tr/blog/laravel-11-ile-gelen-yeni-ince-iskelet-yapisi/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
> **Kısaca:** Mart 2024'te yayımlanan Laravel 11 iskeleti inceltti: beş service provider yerine tek AppServiceProvider, bootstrap/app.php içinde middleware kaydı, isteğe bağlı API ve broadcast route'ları. Yazı neyin kalktığını, günlük işe etkisini ve Laravel 10'dan yükseltmenin nasıl hissettirdiğini anlatıyor.

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

> Güncelleme (2026-10-07): [Laravel 11.x sürüm tablosu](https://laravel.com/docs/11.x/releases) yayın tarihini 12 Mart 2024, güvenlik düzeltmelerinin bitişini 12 Mart 2026 olarak veriyor; yani Laravel 11 artık güvenlik düzeltmesi almıyor. Burada anlatılan iskelet, Laravel 11 ile oluşturulan yeni uygulamalar için geçerli; sürüm notları mevcut uygulamalarda değişiklik gerekmediğini belirtiyor.

## Laravel 11 iskeletten neyi kaldırdı?

[Laravel 10](/tr/blog/laravel-10-daha-siki-tipler-ve-surec-process-katmani/) ve öncesinde `app/Http/Kernel.php` [middleware yığını](/tr/blog/laravel-middleware-ile-isteklere-ortak-davranis-eklemek/) 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.

```php
// 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.

## Laravel 11 neden tek bir service provider ile geliyor?

Laravel 10'da birden fazla service provider dosyasına dağılmış kayıt işlemleri artık `AppServiceProvider` tek noktasında yoğunlaşıyor. [Laravel 11.x sürüm notları](https://laravel.com/docs/11.x/releases) bunu şöyle ifade ediyor: "Instead of the default Laravel application structure containing five service providers, Laravel 11 only includes a single `AppServiceProvider`." Event listener'ları oraya, authorization gate'leri oraya ekliyorsunuz.

```php
// 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. Aynı anlayışla yeni uygulamalar queue, session ve cache için varsayılan olarak `database` sürücüsünü kullanıyor; yeni bir projeye başlamak için ek bir yazılım kurmanız gerekmiyor.

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

---

### Kaynaklar

- [Laravel 11.x: Release Notes, erişim 2026-10-07](https://laravel.com/docs/11.x/releases)
