Tutorial & How-To

Lanjutan: Laravel 13 vs Laravel 12

Artikel ini membahas perbedaan utama antara Laravel 13 dan Laravel 12, mulai dari requirement PHP, perubahan sintaks dengan PHP Attributes, hingga fitur baru seperti AI SDK, queue routing terpusat, dan peningkatan keamanan. Cocok sebagai panduan praktis bagi developer yang ingin memahami perubahan penting sebelum melakukan upgrade ke Laravel 13.

KI

Kevin Iansyah

Full Stack Developer

14 April 20268 mnt baca101 tayangan

Laravel 13 vs Laravel 12: Apa yang Berubah?

Artikel ini adalah lanjutan dari Laravel 13 Resmi Dirilis: Apa yang Perlu Kamu Tahu?. Jika kamu belum membacanya, mulai dari sana dulu agar konteksnya lebih jelas.

Setelah mengenal gambaran besar Laravel 13, sekarang saatnya kita bedah perbedaan konkret antara Laravel 13 dan Laravel 12 - mulai dari requirement, sintaks, hingga fitur baru yang tidak ada di versi sebelumnya.

1. Requirement PHP

Ini adalah perubahan wajib yang paling mendasar.

Laravel 12

Laravel 13

PHP minimum

8.2

8.3

PHP maksimum

8.4

8.5

Jika servermu masih PHP 8.2, kamu harus upgrade PHP dulu sebelum bisa memakai Laravel 13.

2. PHP Attributes vs Class Properties

Di Laravel 12, konfigurasi model ditulis sebagai class properties:

php

// Laravel 12
class Article extends Model
{
    protected $table = 'articles';
    protected $primaryKey = 'article_id';
    protected $fillable = ['title', 'body', 'slug'];
    protected $hidden = ['internal_notes'];
    protected $casts = ['published_at' => 'datetime'];
}

Di Laravel 13, kamu bisa menggunakan PHP Attributes (opsional):

php

// Laravel 13
#[Table('articles', key: 'article_id')]
#[Fillable('title', 'body', 'slug')]
#[Hidden('internal_notes')]
#[Cast('published_at', 'datetime')]
class Article extends Model {}

Hal yang sama berlaku untuk Controller, Job, Command, Listener, Mailable, dan Notification.

Contoh controller middleware:

php

// Laravel 12
class PostController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('can:update,post')->only('edit', 'update');
    }
}

// Laravel 13
#[Middleware('auth')]
#[Authorize('update', Post::class, only: ['edit', 'update'])]
class PostController extends Controller {}

3. Queue Routing Terpusat

Di Laravel 12, kamu mendefinisikan queue di setiap Job secara terpisah:

php

// Laravel 12 - di setiap Job
class ProcessPodcast implements ShouldQueue
{
    public $queue = 'podcasts';
    public $connection = 'redis';
}

Di Laravel 13, ada cara baru yang terpusat melalui Queue::route() di service provider:

php

// Laravel 13 - di AppServiceProvider
Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');
Queue::route(SendWelcomeEmail::class, connection: 'sqs', queue: 'emails');

Ini memisahkan konfigurasi infrastruktur dari business logic - jauh lebih rapi untuk proyek besar.

4. CSRF / Request Forgery Protection

Laravel 12

Laravel 13

Middleware

VerifyCsrfToken

PreventRequestForgery

Metode verifikasi

Token-based saja

Token + origin-aware (header Sec-Fetch-Site)

Laravel 13 lebih aman karena memanfaatkan header browser modern. Token tetap dipakai sebagai fallback untuk browser lama.

Catatan: Jika kamu punya custom CSRF flow atau subdomain yang tidak biasa, ini adalah area yang perlu dicek saat upgrade.

5. Cache::touch()

Di Laravel 12, memperpanjang TTL cache tanpa mengambil ulang datanya cukup merepotkan. Laravel 13 menambahkan method baru:

php

// Laravel 13
Cache::touch('user:profile:123', now()->addHour());

Tidak perlu get()put() lagi hanya untuk refresh TTL.

6. Reverb: Tanpa Redis

Laravel 12

Laravel 13

Reverb driver

Redis / Pusher

Redis / Pusher / Database

Di Laravel 13, kamu bisa menjalankan WebSocket dengan driver database biasa - cocok untuk proyek kecil-menengah yang tidak butuh Redis.

7. Laravel AI SDK

Di Laravel 12, integrasi AI dilakukan via package third-party (misal: openai-php/laravel).

Di Laravel 13, tersedia first-party AI SDK yang provider-agnostic:

php

use Illuminate\AI\Facades\AI;

// Text generation
$response = AI::text('Buatkan deskripsi produk untuk: Sepatu lari ringan');

// Embedding
$vector = AI::embed('Teks yang ingin di-embed');

// Ganti provider? Cukup ubah config, kode tidak perlu disentuh

Provider yang didukung: OpenAI, Anthropic, Google Gemini.


Ringkasan Perubahan

Fitur

Laravel 12

Laravel 13

PHP minimum

8.2

8.3

PHP Attributes

Tidak ada

✅ Opsional, 15+ lokasi

Queue routing

Per-job

Terpusat via Queue::route()

CSRF middleware

VerifyCsrfToken

PreventRequestForgery

Cache TTL refresh

Manual

Cache::touch()

Reverb database driver

Tidak ada

✅ Ada

AI SDK

Third-party

✅ First-party, stable

Passkey auth

Tidak ada

✅ Ada (via Fortify)

JSON:API resources

Tidak ada

✅ Ada

Breaking changes

Nol

Cara Upgrade

bash

# 1. Pastikan PHP 8.3+ sudah terpasang
php -v

# 2. Update composer.json
# "laravel/framework": "^13.0"

# 3. Jalankan update
composer update

# 4. Cek upgrade guide resmi
# https://laravel.com/docs/13.x/upgrade

Untuk proyek standar, proses ini selesai dalam kurang dari 10 menit.


Penutup

Laravel 13 bukan rilis yang revolusioner, tapi itulah kekuatannya. Setiap perubahan dibuat dengan hati-hati - menambah tanpa merusak. Jika proyekmu sudah siap dengan PHP 8.3, upgrade sekarang adalah keputusan yang tepat.

#Backend#Laravel 13#Laravel 12#Laravel#PHP#Perbandingan Framework#Upgrade Laravel#Migrasi#PHP Attributes#Laravel AI SDK#Web Development#PHP 8.3

Ada proyek yang ingin dibahas?

Mari diskusikan website atau kolaborasi berikutnya.

Hubungi saya