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 |
|
|
Metode verifikasi | Token-based saja | Token + origin-aware (header |
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 disentuhProvider 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 |
CSRF middleware |
|
|
Cache TTL refresh | Manual |
|
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/upgradeUntuk 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.
