Kaynak: hafiz.dev
Birçok Laravel uygulaması, kırılma değişikliklerinden dolayı yükselme yapamaz. Bunun sebebi, composer update komutunun hatalarla dolu bir çıkış vermesi ve geliştiricinin terminali kapatmasıdır.
Laravel 13, uygulama koduna “sıfır kırılma değişikliği” ile geldi. Bu doğru. Rotalarınız, kontrolörleriniz ve Eloquent modelleriniz değiştirilmeden kalır. Ancak, composer.json dosyanız farklı bir hikâye. 30-50 bağımlılığınız arasında, neredeyse kesinlikle laravel/framework:^13.0 ile uyumlu olmayan bir sürüm kısıtlaması vardır. Bunun manuel bir çözümü, composer why-not komutunu çalıştırmak, karmaşık çıktıyı okumak, bir çelişkiyi düzeltmek ve bunu sürekli tekrarlamaktır.
Dört belirgin çelişki, çoğu geliştiriciyi yakalar. Gerçek composer.json dosyalarında, GitHub sorunlarında ve r/laravel forumlarında nasıl oluştuğuna bakıldığında, aynı kalıplar ortaya çıkıyor. İşte her biri, neden böyle olduğu ve nasıl çözüleceği:
1. PHP Kısıtlamanız Çok Geniş
Bu en yaygın engelleyicidir ve en kolay gözden kaçırılır. composer.json dosyanız muhtemelen şöyle görünüyor:
{
"require": {
"php": "^8.1"
}
}Laravel 13, minimum PHP 8.3 gerektirir. Yukarıdaki kısıtlama teknik olarak 8.1, 8.2, 8.3 ve 8.4’ü kapsar. Burada iki şey yanlış gidebilir:
- Sunucunuz gerçekten PHP 8.2 çalıştırıyorsa, Composer Laravel 13’ü kurmayı reddedecektir.
- Sunucunuz 8.3 çalışıyorsa bile, geniş bir kısıtlama (
^8.1) uygulamanızın 8.1 veya 8.2 sürümlerinde de çalışabilmesini sağlar; bu da Laravel 13’ün çalışmamasına yol açabilir.
Çözüm: Öncelikle üretimde php -v komutunu çalıştırın. Eğer 8.3’ten düşük bir çıktı alıyorsanız, önce PHP’yi güncelleyin. Sonrasında kısıtlamanızı şu şekilde sıkılaştırın:
{
"require": {
"php": "^8.3"
}
}Bunu atlamayın. Bu yazıdaki diğer tüm düzeltmeler, PHP sürümünüz çok düşükse anlamsızdır.
2. Symfony 8 Sürprizi
Bu güncel bir durumdur ve hemen başınıza gelmeyebilir. Laravel 13.0’dan 13.2’ye kadar PHP 8.3 ile çalışır. Ancak Laravel 13.3 ile birlikte Symfony 8 bileşenlerini (symfony/error-handler, symfony/console) kullanmayı gerektirir ve bu bileşenler PHP 8.4 gerektirir.
PHP 8.3 ile çalışıyorsanız ve başlangıçta yükseltmeden sonra composer update çalıştırırsanız, bu durum sizi birkaç hafta sonra etkileyebilir:
Problem 1
- laravel/framework v13.3.0 requires symfony/error-handler ^7.4.0 || ^8.0.0
-> satisfiable by symfony/error-handler[v8.0.8].
- symfony/error-handler v8.0.8 requires php >=8.4
-> your php version (8.3.30) does not satisfy that requirement.
Çözüm: İki seçeneğiniz var. Ya PHP 8.4 sürümüne güncelleyin (uzun vadede daha iyi bir seçim) ya da Symfony’yi composer.json dosyanızda 7.4 sürümüne sabitleyin:
composer require symfony/console:"^7.4" symfony/error-handler:"^7.4"Bu, Laravel 13.3+ ile çalışırken Symfony 7.4 üzerinde kalmanızı sağlar. Ancak bu geçici bir çözümdür. PHP 8.4’e geçmek en iyi yoldur.
3. Eski Temel Sürümlerle Sınırlandırılmış Spatie Paketleri
Herhangi bir Spatie paketi kullanıyorsanız (ve çoğu Laravel uygulaması kullanır), sürüm kısıtlamalarını dikkatlice kontrol edin. Daha eski temel sürümler genellikle Laravel 13’ü desteklemez. En yaygın sorunlu paketler:
spatie/laravel-permissionv5, Laravel 13’ü desteklemez. En az v6’ya ihtiyacınız var.spatie/laravel-medialibraryeski temel sürümleri Laravel 13’ü desteklemez. Yüklü sürümünüzü en son sürümle karşılaştırın.spatie/laravel-activitylogen az v4.12 gerektirir.
Hata genellikle tipik bir sürüm uyumsuzluğu gibi görünür.
Problem 1
- spatie/laravel-permission v5.11.1 requires illuminate/database ^9.0|^10.0|^11.0|^12.0
-> found illuminate/database v13.0.0 but it does not match ^9.0|^10.0|^11.0|^12.0.
Çözüm: Laravel yükseltmeden önce her Spatie paketini en son temel sürümüne yükseltin. Her biri için GitHub yayın sayfasını kontrol edin. Çoğu, geçiş kılavuzları ile birlikte gelir.
4. Her Şeyi Sessizce Engelleyen Test Paketleri
PHPUnit ve Pest neredeyse her Laravel uygulaması tarafından gereklidir, ancak require-dev altında bulunurlar ve genellikle yükseltmeler sırasında göz ardı edilirler. Bu yanlış.
Laravel 13, phpunit/phpunit:^11.5.50 veya ^12.0 gerektirir.
Çözüm: Öncelikle test paketlerinizi güncelleyin:
composer require --dev phpunit/phpunit:^12.0
# Ya da Pest kullanıyorsanız:
composer require --dev pestphp/pest:^3.0 Ya Bütün Bunları Atlayın
Yukarıdaki her çelişki aynı kalıbı takip eder: composer.json dosyanızda Laravel 13’ün beklediği bir şeyle uyuşmayan bir durum var. Daha hızlı bir yol var. composer.json dosyanızı Laravel Upgrade Analyzer’a yapıştırın ve hangi bağımlılıkların dikkat gerektirdiğini gösterir. Yaklaşık 5 saniye alır ve hiçbir şey depolanmaz.
SSS
Yükseltme Analizörü, eski yükseltmeler için çalışıyor mu?
Şu anda yalnızca Laravel 13’e odaklanmaktadır. Yükseltme yollarına daha fazla destek ileride gelebilir.
Eğer paketlerim analizörün kurallarında yoksa ne olacak?
Dikkate alınmadıysa, composer why-not laravel/framework:^13.0 komutunu çalıştırabilirsiniz.
composer.json dosyam depolanıyor veya paylaşılıyor mu?
Hayır. Analizör, dosyanızı sunucu tarafında işler ve hemen siler. Hiçbir şey depolanmaz, kaydedilmez veya paylaşılmaz.
Kaynak: Orijinal Makale


