Laravel güncellemeleri genellikle kuru değişiklik günlüğü ve sürüm notları olarak tartışılır. Gerçek dünya etkilerini anlamak için, Laravel 13 + Inertia + Vue 3 + TypeScript kullanarak işlevsel bir uygulama geliştirdim ve deneyimi Laravel 12 ile karşılaştırdım.
<p>Deneyim, gerçek özellikleri göndermeye odaklandı: CRUD ekranları, doğrulama, karmaşık Eloquent sorguları ve yorumlar gibi ilişkiler.</p>
<p>Bu makale, yaptıklarım ve öğrendiklerimin pratik bir özetidir.</p>
<blockquote>
<p><strong>Zaman Notu:</strong> Bu yapının oluşturulduğu sırada Laravel 13 <code>13.x-dev</code> olarak mevcuttu. Geliştirme dallarını kullanırken küçük ekosistem sorunları bekleyin.</p>
</blockquote>
<hr/>
<h2>
<a name="1-what-really-changes-from-laravel-12-%E2%86%92-laravel-13" href="#1-what-really-changes-from-laravel-12-%E2%86%92-laravel-13">
</a>
1. Laravel 12'den Laravel 13'e Gerçek Olarak Ne Değişiyor?
</h2>
<h3>
<a name="the-php-baseline-move" href="#the-php-baseline-move">
</a>
PHP Temel Versiyonunun Değişimi
</h3>
<p>En önemli "gerçek dünya" farkı temel versiyondur: Laravel 13, minimum PHP sürümünü ileri taşıyor. Uzun vadede faydalı olmasına rağmen, anında altyapınızı etkiliyor ve <strong>CI görüntüleri</strong>, <strong>Docker temel görüntüleri</strong> ve <strong>Forge veya Vapor</strong> gibi barındırma ortamlarında güncellemeler gerektiriyor. Pratikte, güncelleme maliyeti genellikle uygulama kodunuzdan ziyade çevresel ve bağımlılıklara bağlıdır.</p>
<h3>
<a name="attributes-become-firstclass" href="#attributes-become-firstclass">
</a>
Özellikler Birinci Sınıf Haline Geliyor
</h3>
<p>Laravel 13, daha önce korunan sınıf özelliklerinde bulunan yapılandırmalar için <strong>PHP Özelliklerine (<code>#[...]</code>)</strong> ağır şekilde dayanıyor. Bu, sınıfları daha <strong>deklare</strong> hale getiriyor; bir modeli açtığınızda, dosyanın en üstünde export'ları, izinleri ve kapsamları hemen görebiliyorsunuz.</p>
<h3>
<a name="inertia-stability" href="#inertia-stability">
</a>
Inertia Stabilitesi
</h3>
<p>Bir büyük avantaj, <strong>Inertia’nın bu geçiş sırasında stabil kalması</strong>. Arka uç temelini modernize ederken, SPA benzeri ön uç iş akışınızı aynı şekilde tutabilirsiniz: <code>Inertia::render()</code>, Vue bileşenleri ve <code>useForm<t>()</t></code> ile.</p>
<h3>
<a name="2-attributes-annotations-become-firstclass" href="#2-attributes-annotations-become-firstclass">
</a>
2) Özellikler (annotasyonlar) birinci sınıf hale geliyor
</h3>
<p>Laravel 13, sınıf özelliklerinde bulunan yapılandırmalar için <strong>PHP Özelliklerine (<code>#[...]</code>)</strong> güveniyor.</p>
<p>Bu, "kod satırlarını tasarruf etme" ile ilgili değil. Bu, sınıfları daha <strong>deklare</strong> hale getirme ile ilgilidir; bir modeli açtığınızda, neyi izin verdiğini/export ettiğini ve hangi kapsamların mevcut olduğunu hemen görebilirsiniz.</p>
<p>Projede kullandığım tam stil:</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="cp"><?php </span?>namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Visible;
use Illuminate\Database\Eloquent\Attributes\Scope;
#[Fillable([‘name’, ‘price_cents’, ‘is_active’])]
#[Visible([‘id’, ‘name’, ‘price_cents’, ‘is_active’])]
class Product extends Model
{
#[Scope]
protected function search(Builder $query, string $q): void
{
$query->where(‘name’, ‘like’, “%{$q}%”);
}
}
<h3>
<a name="3-inertia-stays-stable-and-thats-a-good-thing" href="#3-inertia-stays-stable-and-thats-a-good-thing">
</a>
3) Inertia stabil kalıyor (ve bu güzel bir şey)
</h3>
<p>Ön uç tarafında, Inertia "Laravel 13 ile değişmiyor". Büyük değer, arka ucu modernize edebilmenizdir, bununla birlikte SPA benzeri iş akışınızı aynı tutmak: </p>
<ul>
<li>denetleyici <code>Inertia::render(...)</code> döner</li>
<li>sayfalar Vue bileşenleridir</li>
<li>formlar <code>useForm<t>()</t></code> tarafından oluşturulur</li>
</ul>
<p>Yani güncelleme çabanız <strong>arka uç temeli + kalıplarda</strong> yoğunlaşır, "ön yüzü yeniden yazma" yerine.</p>
<hr/>
<h2>
<a name="project-setup-laravel-13-inertia-vue-3-typescript" href="#project-setup-laravel-13-inertia-vue-3-typescript">
</a>
Proje Kurulumu: Laravel 13 + Inertia + Vue 3 + TypeScript
</h2>
<h3>
<a name="1-composer-environment" href="#1-composer-environment">
</a>
1) Composer + çevre
</h3>
<p>Eğer <code>13.x-dev</code> kullanıyorsanız, <code>composer.json</code> dosyanızı temiz tutun:</p>
<ul>
<li>
<code>minimum-stability</code> ve <code>prefer-stable</code> üst düzey anahtarlar olmalı, <code>require</code> içinde değil
</li>
<li>Her şey için dev versiyonları yüklememek için <code>prefer-stable: true</code> ayarlanması gerekebilir</li>
<li>Bazı paketler geride kalabilir (ben bunu <code>laravel/tinker</code> ile yaşadım)</li>
</ul>
<p>Minimal bir başlangıç noktası:</p>
<div class="highlight js-code-highlight">
<pre class="highlight json"><code><span class="p">{</span>
<span class="nl">"require"</span><span class="p">:</span>
<span class="p">{</span>
<span class="nl">"php"</span><span class="p">:</span> <span class="s2">"^8.3"</span><span class="p">,</span>
<span class="nl">"laravel/framework"</span><span class="p">:</span> <span class="s2">"13.x-dev"</span>
<span class="p">},</span>
<span class="nl">"minimum-stability"</span><span class="p">:</span> <span class="s2">"dev"</span><span class="p">,</span>
<span class="nl">"prefer-stable"</span><span class="p">:</span> <span class="kc">true</span>}


