Halo teman-teman semuanya, pada artikel kali ini kita semua akan membahas apa saja fitur-fitur baru dan perubahan yang terjadi di Laravel 11.
Jika kita lihat pada kebijakan dukungan Laravel, maka Laravel 11 akan dirilis pada Q1 tahun 2024, yaitu tepatnya di bulan Maret 2024.
Version |
PHP (*) |
Release |
Bug Fixes Until |
Security Fixes Until |
9 |
8.0 - 8.2 |
February 8th, 2022 |
August 8th, 2023 |
February 6th, 2024 |
10 |
8.1 - 8.3 |
February 14th, 2023 |
August 6th, 2024 |
February 4th, 2025 |
11 |
8.2 - 8.3 |
March 12th, 2024 |
September 3rd, 2025 |
March 12th, 2026 |
12 |
8.2 - 8.3 |
Q1 2025 |
Q3, 2026 |
Q1, 2027 |
Kemudian apa saja fitur-fitur dan perubahan yang terjadi di Laravel 11 ? mari kita akan membahasnya satu-persatu.
Pengenalan Laravel 11
Laravel 11 melanjutkan perbaikan yang dilakukan di Laravel 10.x dengan memperkenalkan struktur aplikasi yang disederhanakan, per-second rate limiting, health routing, graceful encryption key rotation, queue testing improvements, Resend mail transport, Prompt validator integration, new Artisan commands, dan masih banyak lagi.
Selain itu, Laravel juga merilis sebuah library yang bernama Laravel Reverb. Library ini merupakan server WebSocket yang memberikan kemampuan real-time yang baik pada aplikasi yang kita buat.
PHP 8.2
Untuk PHP dengan versi 8.1
kini sudah tidak akan bisa digunakan lagi di Laravel 11. Untuk teman-teman yang akan memulai membuat project baru di Laravel 11, maka harus menggunakan PHP versi 8.2
atau 8.3
.
Berikut ini informasi terkait dukungan PHP 8.1
yang dihentikan di Laravel 11.
[11.x] Drop PHP 8.1 support
Kerangka Aplikasi yang lebih Sederhana
Laravel 11 akan hadir dengan struktur folder yang disederhanakan. Jadi sekarang saat teman-teman ketika membuat project baru di Laravel 11, maka di dalam folder app
hanya terdapat 3 folder saja, yaitu Http
, Models
dan Providers
, kurang lebih seperti ini.
app
├── Http
│ └── Controllers
│ └── Controller.php
├── Models
│ └── User.php
└── Providers
└── AppServiceProvider.php
Struktur aplikasi baru ini dimaksudkan untuk memberikan pengalaman yang lebih ramping dan modern, dengan tetap mempertahankan banyak konsep yang sudah familiar bagi pengembang Laravel sebelumnya.
INFORMASI : jika sebelumnya teman-teman menggunakan Laravel versi 10
ke bawah dan ingin upgrade ke Laravel 11
, maka kita tidak harus mengadopsi struktur project baru ini. Artinya, struktur project Laravel lama masih tetap bisa digunakan.
Tampilan Welcome Screen Baru
Di Laravel 11 untuk tampilkan welcome screen kini telah diubah, kurang lebih seperti berikut ini.
File Bootstrap Aplikasi
File bootstrap/app.php
telah direvitalisasi sebagai kode pertama dari aplikasi. Dari file ini, kita sekarang dapat menyesuaikan route aplikasi, middleware, service providers, exception handling, dan banyak lagi. File ini menyatukan berbagai pengaturan aplikasi yang sebelumnya tersebar di seluruh struktur file aplikasi Laravel:
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
Perubahan Route
Sekarang di Laravel 11 untuk default Route-nya hanya akan terdapat 2 file saja, yaitu console.php
dan web.php
. Terus bagaimana jika kita ingin membuat route untuk Rest API ? cukup mudah kok, kita tinggal jalankan saja perintah berikut ini.
php artisan install:api
Dengan begitu, maka file api.php
akan digenerate di dalam folder routes
. Begitu juga dengan route broadcasting, teman-teman bisa menjalankan perintah berikut ini.
php artisan install:broadcasting
Perintah Artisan Baru
Perintah Artisan baru telah ditambahkan untuk memungkinkan pembuatan class, enum, interface, dan traits:
php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
Model Cast Improvements
Dulu jika kita ingin mendefiniskan cast
tentu kita menggunakan sebuah properti, contohnya seperti ini.
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
Sekarang di dalam Laravel 11, untuk mendefinisikan cast
kita harus menggunakan method
, jadi hasilnya seperti berikut ini.
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
Default Database
Secara default, aplikasi Laravel baru menggunakan database SQLite untuk penyimpanan database, serta driver database untuk session, cache, dan queue.
Laravel Reverb
Laravel Reverb menghadirkan komunikasi WebSocket real-time yang sangat cepat dan terukur langsung ke aplikasi Laravel kita, dan menyediakan integrasi dengan event broadcasting Laravel yang sudah ada, seperti Laravel Echo.
Untuk informasi lebih lanjut tentang Laravel Reverb : https://laravel.com/docs/11.x/reverb
Trait Dumpable
Saat itu, di Laravel 11 semua kelas telah ditambahkan method dd
atau dump
. Tujuannya untuk menyerdehanakan inti dari framework itu sendiri. Contohnya seperti berikut ini.
class Stringable implements JsonSerializable, ArrayAccess
{
use Conditionable, Dumpable, Macroable, Tappable;
str('foo')->dd();
str('foo')->dump();
Migration yang lebih Sederhana
Sekarang di Laravel 11 untuk default migration yang disertakan akan disederhanakan, yaitu kita hanya akan menemukan 3 file migration saja.
database/migrations
├── 0001_01_01_000000_create_users_table.php
├── 0001_01_01_000001_create_cache_table.php
└── 0001_01_01_000002_create_jobs_table.php
0 directories, 3 files
Per-Second Rate Limiting
Pada versi sebelumnya, Laravel membatasi rate limiter itu adalah "per menit"
. Dan sekarang di Laravel mendukung rate limiting "per detik"
, termasuk untuk permintaan HTTP dan queued jobs.
RateLimiter::for('invoices', function (Request $request) {
return Limit::perSecond(1);
});
Untuk informasi lebih lanjut tentang rate limiting di Laravel, lihat dokumentasinya.
Eager Loading Limit
Laravel 11 akan terintegrasi dengan package yang nanti akan memudahkan kita dalam membuat query di dalam eager loading. Berikut ini contohnya.
User::select('id', 'name')->with([
'articles' => fn($query) => $query->limit(5)
])->get();
Untuk informasi lebih lanjut, lihat selengkapnya disini https://github.com/staudenmeir/eloquent-eager-limit
Kesimpulan
Mungkin untuk seseorang pemula akan sedikit kaget karena struktur yang ada di Laravel kali ini akan lebih minimalis dan berbeda dengan versi sebelum-sebelumnya. Tapi tidak perlu kawatir, karena pada dasarnya dari Laravel versi 5 sampai saat ini masih memiliki konsep yang sama.
Terima Kasih