laravel laravel-13 php ai-sdk web-development

Laravel 13: PHP Attributes, AI SDK ve Sifir Breaking Change

Abdullah Bozdağ 23 Mart 2026
Laravel 13: PHP Attributes, AI SDK ve Sifir Breaking Change

Neden bu surum farkli?

Laravel 13, 17 Mart 2026'da Laracon EU sahnesinde duyuruldu ve ayni gun yayinlandi. Taylor Otwell'in sahnedeki sozu netti: sifir breaking change. Bu, Laravel tarihinde nadir gorulen bir yaklasim. Buyuk surum numarasi artmis ama upgrade suresi cogu proje icin 10 dakikayi gecmiyor.

Minimum PHP surumu 8.3'e cikti. Bu, altyapi tarafinda yapmaniz gereken tek zorunlu degisiklik. PHP 8.3 ile gelen typed class constants, json_validate() ve JIT iyilestirmelerinden framework seviyesinde fayda goruyorsunuz. Eger hala PHP 8.2'deyseniz, once runtime'i yukseltin, sonra composer.json'da laravel/framework: ^13.0 yapin.

PHP Attributes her yere yayildi

Laravel 13'un en goze carpan ozelligi: framework genelinde 15'ten fazla noktada native PHP attribute destegi. Bu opsiyonel bir degisiklik, mevcut property-based yapilandirma aynen calismaya devam ediyor.

Eloquent modellerde $table, $fillable, $hidden gibi property'leri sinifin tepesinde attribute olarak tanimlayabiliyorsunuz:

#[Table('users', key: 'user_id', keyType: 'string', incrementing: false)]
#[Fillable('name', 'email')]
#[Hidden('password', 'remember_token')]
class User extends Model
{
// Model icerisi temiz kaliyor
}

Controller tarafinda middleware ve authorization da attribute'e tasindi:

#[Middleware('auth')]
class CommentController
{
#[Middleware('subscribed')]
#[Authorize('create', [Comment::class, 'post'])]
public function store(Post $post)
{
// ...
}
}

Queue job'larinda #[Tries], #[Backoff], #[Timeout], #[FailOnTimeout] gibi attribute'ler de geldi. Biz RadKod'da bu yaklasimi ilk testlerimizde denedik: kucuk modellerde okunurluk artisi net. Ama 20+ field'li, karmasik cast ve fillable tanimlamasi olan modellerde tek satirda her seyi attribute'e sikmak okunurlugu dusurdu. Tavsiyemiz: controller middleware ve job konfigurasyonu icin hemen adapte edin, model attribute'lerini ise proje buyuklugune gore degerlendirin.

Laravel AI SDK artik stabil

Laravel 13 ile ayni gun, Laravel AI SDK beta'dan cikarip stabil olarak etiketlendi. Provider-agnostic bir arayuz sunuyor: text generation, tool-calling agent'lar, image olusturma, audio sentezi ve embedding uretimi tek bir API'den erisilebilir.

use App\Ai\Agents\SalesCoach;

$response = SalesCoach::make()->prompt('Bu satis transkriptini analiz et...');
return (string) $response;

Gorsel uretimi ve embedding'ler de framework-native:

use Laravel\Ai\Image;

$image = Image::of('Mutfak tezgahinda duran bir simit')->generate();

// Embedding uretimi
use Illuminate\Support\Str;
$embeddings = Str::of('Izmir\'de en iyi kahvalti mekanlar')->toEmbeddings();

Trade-off'u net konusalim: SDK simdilik OpenAI ve Anthropic entegrasyonlarini destekliyor, provider degistirmek tek bir config degisikligi. Ama kendi fine-tuned modelinizi veya self-hosted bir LLM kullaniyorsaniz, custom driver yazmaniz gerekecek. SDK'nin retry logic'i ve error normalization'i production-grade, ancak yuksek throughput senaryolarinda queue entegrasyonunu test etmeden deploy etmeyin.

Semantik arama ve vektor sorgusu

Laravel 13, query builder'a native vektor benzerlik destegi ekledi. PostgreSQL ve pgvector extension'i ile calisiyor.

$documents = DB::table('documents')
->whereVectorSimilarTo('embedding', 'Napa Valley\'daki en iyi sarapcilar')
->limit(10)
->get();

Daha once bunun icin ayri bir vektor veritabani (Pinecone, Weaviate) veya custom pgvector entegrasyonu gerekliydi. Artik Laravel'in ORM'i icinden dogrudan yapabiliyorsunuz. Kucuk ve orta olcekli projeler icin altyapi karmasikligini ciddi olcude azaltiyor. Buyuk olcekli, milyon kayitlik vektor aramalari icin hala dedicated bir vektor DB daha performansli olacaktir.

Cache::touch() ile TTL yonetimi

Basit ama etkili bir ekleme. Onceden bir cache item'in sure uzatmak icin degeri alip tekrar yazmak gerekiyordu: iki round-trip. Yeni Cache::touch() metodu degeri okumadan sadece TTL'i uzatiyor:

// Saniye ile uzat
Cache::touch('user_session:123', 3600);

// DateTime ile uzat
Cache::touch('analytics_data', now()->addHours(6));

// Suresiz yap
Cache::touch('report_cache', null);

Redis'te tek bir EXPIRE komutu, Memcached'de native TOUCH, database driver'da tek bir UPDATE. Sliding session, rate limiting, aktif dashboard verisi gibi her istekte TTL uzatan senaryolarda gereksiz veri transferini sifirliyor. Goz onunde olmayan ama production'da fark yaratan turden bir iyilestirme.

Reverb artik Redis olmadan yatay olcekleniyor

Laravel Reverb, framework'un first-party WebSocket sunucusu. Laravel 13'e kadar yatay olcekleme icin Redis zorunluydu. Artik database driver ile mevcut MySQL veya PostgreSQL'inizi kullanabiliyorsunuz:

// config/broadcasting.php
'reverb' => [
'driver' => 'reverb',
'scaling' => [
'driver' => 'database', // Yeni, onceden Redis zorunluydu
],
],

Kucuk ve orta olcekli projeler icin bu buyuk bir rahatlama: sadece WebSocket icin ayri bir Redis instance provizyon etmenize gerek yok. Canli bildirimler, chat, collaborative editing gibi ozellikler mevcut veritabaniniz uzerinden calisabiliyor. Binlerce es zamanli WebSocket baglantisi olan yuksek trafik uygulamalarinda Redis hala onerilir.

Diger dikkat cekici degisiklikler

JSON:API Resources

Laravel artik JSON:API spesifikasyonuna uyumlu resource siniflarini first-party olarak destekliyor. Serialization, relationship inclusion, sparse fieldsets ve uyumlu response header'lari otomatik. API-first projeler icin daha once elle veya ucuncu parti paketlerle yapilan islerin buyuk bolumu artik framework icinde.

Queue::route() ile merkezi kuyruk yonetimi

Her job sinifinda queue ve connection property'si tanimlamak yerine, tek bir noktadan yonetebiliyorsunuz:

Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');

Altyapi concern'lerini is mantigi kodundan ayiriyor. Kuyruk topolojisi degistiginde her job dosyasini acmak yerine service provider'dan yonetiyorsunuz.

PreventRequestForgery

CSRF middleware VerifyCsrfToken'dan PreventRequestForgery'ye yeniden adlandirildi ve Sec-Fetch-Site header'i uzerinden origin-aware dogrulama eklendi. Token-based CSRF korumasinin ustune ikinci bir katman. Eski alias'lar calismaya devam ediyor ama custom CSRF flow'lariniz varsa test edin.

Starter Kit'lerde passkey ve team destegi

WebAuthn tabanli passkey authentication artik starter kit'lere ve Laravel Fortify'a entegre. Face ID, parmak izi veya hardware key ile giris yapilabiliyor. Eski Jetstream'deki team fonksiyonalitesi de yeni starter kit'lere farkli bir implementasyonla geri geldi. Artik ayni anda farkli tarayici sekmelerinde farkli takimlar arasinda gecis yapilabiliyor.

Upgrade stratejisi

Upgrade guide'daki uc kritik noktaya dikkat edin: PreventRequestForgery origin konfigurasyonu, cache serializable_classes ayari (varsayilan olarak false geldi, deserialization saldirilarini engelliyor) ve cache/session prefix degisiklikleri. Eger custom cache store implementation'iniz varsa, yeni touch metodunu eklemeniz gerekiyor.

Ekip olarak tavsiyemiz: branch acin, composer update calistirin, test suite'inizi kosuturun. Laravel Shift mekanik degisikliklerin buyuk bolumunu otomatize ediyor, buyuk codebase'lerde zaman kazandiriyor. Major ekosistem paketleri (Livewire, Inertia.js, Filament, Spatie) Laravel 13 ile uyumlu.

Biz RadKod'da aktif projelerimizi Laracon EU duyurusundan hemen sonra staging ortaminda test etmeye basladik. PHP 8.3 gereksinimi disinda gercek anlamda sifir sorunla karsilastik. Yeni projelerde AI SDK ve vektor arama entegrasyonlarini ilk sprint'ten itibaren kullanmaya basliyoruz. Eger hala Laravel 12'deyseniz ve test coverage'iniz makul seviyedeyse, simdi upgrade etmenin tam zamani.

Paylaş:

RadKod Hizmetleri

Projeniz için profesyonel yazılım hizmetleri mi arıyorsunuz?

Web Geliştirme Mobil Uygulama Tum Hizmetler

Abdullah Bozdağ

Abdullah Bozdağ

RadKod Ekibi