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

Laravel 10: daha sıkı tipler ve Process katmanı

Laravel 10'un getirdiği tip disiplini ve yeni Process facade'i: framework'ün olgunlaşan kod tabanını günlük geliştirmeye yansıtmak.


Laravel 10, Şubat 2023’te yayınlandı. Majör sürüm olmasına rağmen kırıcı değişiklik listesi oldukça kısa; bu, framework’ün olgunluğunun bir göstergesi. Dışarıdan bakan birine “büyük yenilik yok” gibi görünebilir. Ama bir sürümü salt yeni özelliklerle değerlendirmek yanlış bir ölçüt. Laravel 10’un asıl değeri, tip tutarlılığı yönündeki sistematik adımda.

Framework kodu tip bildirimleriyle kaplandı

Laravel’in kaynak kodunun tamamı artık parametre ve dönüş tipi bildirimleri içeriyor. Bu, framework’ün kendi iç tutarlılığı için bir hamle; ama dolaylı olarak IDE desteğini de doğrudan etkiliyor. PhpStorm ya da VS Code üzerinden bir facade veya contract metoduna gittiğinizde, ne alacağınızı ve ne vermeniz gerektiğini artık imzadan okuyabiliyorsunuz.

Pratik etkisi şu: kendi kodunuzu yazarken tipleri atlasanız bile, framework tarafıyla kesiştiğiniz noktalarda statik analiz araçları (Psalm, PHPStan) gerçekçi çıktılar üretiyor.

// Laravel 10 öncesi: dönüş tipi belirsizdi
public function find($id)

// Laravel 10 ile: imzadan okunabilir
public function find(int|string $id): Model|null

Bu değişiklik kendi projenize doğrudan yansımıyor, ama bir fark yaratıyor: IDE, framework sınırında artık karanlıkta değil.

Kendi projelerde bu değişikliğin somut etkisini PHPStan seviyesi yükseltince gördüm. Laravel 9’da seviye 5’te geçen bazı kontroller, 10’a geçtikten sonra framework tiplerine yaslanarak çok daha iyi çalışmaya başladı; önceden “bilinmiyor” olarak geçen şeyler artık gerçek tiplere bağlandı.

Yeni Process katmanı

Laravel 10’un en somut ve uygulamalı yeniliği Process facade’i. PHP’de harici süreç başlatmak için exec, shell_exec ya da proc_open kullandıysanız, bu araçların ne kadar ham olduğunu biliyorsunuzdur: çıktı yönetimi, hata yakalama, timeout — hepsini elle yazmak gerekiyordu.

Process katmanı bunu sarmallıyor:

use Illuminate\Support\Facades\Process;

$result = Process::run('git log --oneline -5');

if ($result->successful()) {
    echo $result->output();
} else {
    echo $result->errorOutput();
}

Timeout belirlemek, çalışma dizini ayarlamak, ortam değişkeni geçmek hepsi zincirleme metodlarla yapılabiliyor:

$result = Process::timeout(30)
    ->path(base_path())
    ->env(['NODE_ENV' => 'production'])
    ->run('npm run build');

Ama Process katmanının asıl değeri test tarafında. Process::fake() ile gerçek sistem süreçleri çalıştırmadan test yazabiliyorsunuz:

Process::fake([
    'git *' => Process::result(output: 'abc1234 son commit'),
]);

// Artık sisteme git komutu göndermeden test çalışır

Bu özelliği gerçek bir ihtiyaçtan değerlendiriyorum: dış komutlara bağımlı işlemleri test altına almak zaten zordu. Fake mekanizması olmadan ya gerçekten çalıştırır ya da işlevi tamamen mocklamak zorunda kalırsınız. İkisi de tatmin edici değil.

Skeleton ve başlangıç noktası

Laravel 10 ile birlikte laravel/laravel iskeletinin de ince bir düzenleme geçirdiğini belirtmek gerek. Özellikle routes/ altındaki dosyalarda tip bildirimleri standart hale geldi. Yeni bir proje başlatırken bu farkı küçük bulan varsa: birkaç ay sonra üzerinde çalışılan kodda bu disiplinin ne anlama geldiği netleşiyor.

Özellikle daha büyük ekiplerde ya da uzun süreli projelerde iskelet katı olunca yeni yazılan kodun da o çizgiyi koruması kolaylaşıyor. Zorunlu değil ama standart haline gelen bir yaklaşımı kırmak için de bilinçli bir karar vermek gerekiyor; bu sürtünme aslında bir güvence.

Güncelleme maliyeti

Laravel 9’dan 10’a geçiş, majör sürüm atlamalarının en zahmetsizlerinden. Resmi yükseltme kılavuzu kısa; çoğu uygulama için composer.json güncellemesi ve birkaç küçük düzeltme yeterli. PHP 8.1 minimum gereksinim; PHP 8.2 ile de tam uyumlu.

Güncelleme öncesinde üçüncü parti paketlerin Laravel 10 uyumluluğunu kontrol etmek bazen baskı noktası olabiliyor. composer outdated çıktısına bakmak ve sürüm kısıtlamalarını incelemek geçiş planlamasını kolaylaştırıyor. Çoğu popüler paket geçişi hızla tamamladı; ama nadiren bir paketin güncelleme beklemesi geçişi birkaç hafta erteleyebiliyor.

Benim için bu sürümün mesajı şu: Laravel, zaten işe yarayan bir framework’ü daha titiz ve öngörülebilir kılma yönünde bilinçli adımlar atıyor. Her majör sürümde büyük özellik beklemek zorunda değilsiniz; bazen “framework’ün kendi ev düzeni” en değerli şey.

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