Laravel 11 membawa revolusi dalam framework PHP. Pelajari tentang fitur-fiturnya, perubahan, dan bagaimana mereka mengoptimalkan coding kita.
Dalam artikel ini, kita akan membahas apa saja yang terbaru dalam Laravel 11 yang akan dirilis pada bulan Februari tahun ini.
Untuk menjalankan Laravel 11 ini kita memerlukan php paling rendah itu v8.2, artinya jika sekarang Anda sedang memakai v8.3 itu tentu bisa.
Jika Anda membaca artikel ini sebelum rilis, Anda bisa melakukan instalasi menggunakan Laravel CLI dengan flag --dev
atau melalui Composer.
laravel new laravel-11 --dev
Atau Anda bisa melakukannya dengan composer dengan menjalankan perintah berikut
composer create-project --prefer-dist laravel/laravel laravel-11 dev-master
Dengan begitu, Anda akan mendapatkan early project untuk laravel 11.
Bagi beberapa orang ini tidak terlalu penting, namun ya ini harus diberi tahu juga, bahwa laravel sekarang sudah memperbarui welcome page nya.
Untuk Anda yang sudah familiar dengan penggunaan kernel, seperti dalam pendaftaran middleware, kabar baiknya kini Anda dapat melakukan hal tersebut secara langsung melalui direktori /bootstrap/app.php.
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure()
->withProviders()
->withRouting(
web: __DIR__.'/../routes/web.php',
// api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
// channels: __DIR__.'/../routes/channels.php',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
Untuk file app/Console/Kernel.php sekarang sudah tidak ada lagi:
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
Itulah mengapa Laravel membuat routes/console.php tersedia secara default; nantinya, semua yang dilakukan di sini, seperti menjalankan schedule, akan dipindahkan ke route console tersebut.
protected function schedule(Schedule $schedule): void
{
$schedule->command('backup:clean')->daily()->at('03.00');
Sekarang, route hanya ada dua, yaitu console.php dan web.php. Namun, jika Anda ingin memiliki route lain seperti channels.php dan api.php, Anda bisa membuatnya sendiri, atau menggunakan perintah artisan seperti:
# api
php artisan install:api
# channel
php artisan install:broadcasting
Setelah itu, maka kita bisa menghilangkan komentar pada file bootstrap/app.php yaitu:
return Application::configure()
->withProviders()
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
channels: __DIR__.'/../routes/channels.php',
)
->withMiddleware(...)
->withExceptions(...)->create();
Dengan begitu, maka route untuk api dan channels akan terbaca pada project kita.
Dulunya, ketika ingin casting column pada model, yang kita lakukan adalah seperti:
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
Sekarang itu sudah berubah menjadi seperti:
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
Alasan perubahan ini dibuat adalah untuk memberikan kita fleksibilitas lebih dalam menggunakan casting ini. Kita bisa melakukan berbagai hal tambahan, seperti mengimplementasikan class
atau function
lain seperti:
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'options'=› AsEnumCollection::of(UserOption::class),
];
}
Hal ini bertujuan untuk menyederhanakan inti framework karena beberapa kelas saat ini memiliki metode dd
atau dump
. Dan juga kita dapat menggunakan trait Dumpable
ini di kelas yang kita punya:
class Carbon extends BaseCarbon
{
use Conditionable, Dumpable;
Sehingga kita bisa melakukan hal-hal seperti:
today()->dd();
Bahkan kita bisa juga menggunakan trait ini pada class yang kita punya termasuk model-model yang kita punya nantinya.
Controller.php
sekarang tidak lagi bergantung pada BaseController.php
, jadi jika Anda perhatikan sekarang, isi dari Controller.php
cukup sederhana.
abstract class Controller
{
//
}
Jika Anda perhatikan folder app, yang dulunya ini sangat banyak di dalamnya namun sekarang hanya tinggal 3 files dan 4 folders.
app
├── Http
│ └── Controllers
│ ├── Controller.php
├── Models
│ └── User.php
└── Providers
└── AppServiceProvider.php
Sebelumnya, folder config ini akan di huni dengan semua config yang ada dan itu default di bawa oleh skeleton yang lama. Yang mana terkadang config itu tidak penting, dan bahkan ada beberapa yang tidak pernah kita robah. Nah untuk itu, di versi 11 ini config yang dibawa yaitu config yang umum dirobah saja. Berikut adalah list file config yang nanti akan di bawa laravel 11
config
├── app.php
├── auth.php
├── cache.php
├── database.php
├── filesystems.php
├── logging.php
├── mail.php
├── queue.php
├── services.php
└── session.php
Namun, jika kita ingin config yang lain, kita tentu bisa menjalankan perintah artisan seperti:
php artisan config:publish
Dengan begitu, maka output yang keluar menanyakan config apa yang ingin kita publish. Sebagai contoh, saya akan memilih config untuk services
.
Maka output nya akan seperti:
┌ Which configuration file would you like to publish? ─────────┐
│ services │
└──────────────────────────────────────────────────────────────┘
INFO Published 'services' configuration file.
Dengan begitu, maka services.php akan sudah ada dalam folder config.
config
└── services.php
0 directories, 1 file
Untuk project yang dimulai dengan laravel 11, maka hanya akan ada 3 file migration saja yang dibawa by default yaitu.
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
Saat saya menulis ini, ada migrasi untuk cache, dan bisa jadi nantinya hanya akan ada 2 saja.
Sebelumnya, ada migrasi untuk reset_tokens dan personal_access_tokens, namun kini itu tidak ada lagi. Berikut adalah daftar migrasi sebelum v11.
database/migrations
├── 2014_10_12_000000_create_users_table.php
├── 2014_10_12_100000_create_password_reset_tokens_table.php
├── 2019_08_19_000000_create_failed_jobs_table.php
└── 2019_12_14_000001_create_personal_access_tokens_table.php
0 directories, 4 files
Laravel 11 akan terintegrasi dengan package yang dibuat oleh Jonas Staudenmeir, memudahkan kita dalam mengatur query yang digunakan dalam eager loading.
User::query()->select('id', 'name')->with([
'statuses' => fn($query) => $query->take(5)
])->get();
Ada beberapa tambahan untuk perintah artisan make di antaranya ada make:enum
dan juga make:trait
.
Di versi laravel 11 ini, mereka menambahkan perintah artisan baru yaitu make:enum
.
php artisan make:enum ArticleStatus
By default, file akan masuk ke dalam folder app
, namun untuk membuat struktur lebih bagus, yang biasa saya lakukan adalah membuat enum kedalam namespace App\Enums
.
php artisan make:enum Enums/ArticleStatus
Dengan begitu, maka file akan masuk kedalam folder app/Enums
.
Untuk tambahan atau flag yang bisa kita lakukan adalah -i
untuk integer, atau -s
untuk string.
php artisan make:enum Enums/ArticleStatus -s
Dengan begitu, maka file akan langsung menentukan tipe datanya seperti:
namespace App\Enums;
enum ArticleStatus: string
{
//
}
Sama seperti enum, by default perintah make:trait
juga akan masuk kedalam ke folder app
, namun jika ingin membuat namespace nya ke App/Traits
. Bisa dengan perintah berikut:
php artisan make:trait Traits/Sluggable
Dengan begitu, maka akan otomatis file akan masuk kedalam folder app/Traits
.
namespace App\Traits;
enum Sluggable
{
//
}
Beberapa direktori mengalami perubahan di Laravel versi 11, namun proses upgrade dari versi 10 ke 11 tidak memerlukan modifikasi apa pun. Untuk melakukan upgrade, cukup ubah versi di file composer.json dan pastikan kompatibilitas dengan third-party package yang digunakan.
Bagi Anda yang telah lama menggunakan Laravel, Anda akan merasa nyaman karena perubahan yang terjadi tidak terlalu signifikan, dan esensi utama dari framework ini tetap sama. Hal-hal seperti mendefinisikan relasi dan routing masih berjalan seperti biasa.
Dari serangkaian pembaruan mulai dari v5 hingga v10, kali ini adalah momen istimewa dimana Laravel menghadirkan versi yang dikenal sebagai Slim Skeleton. Versi ini dirancang untuk membuatnya lebih mudah bagi pemula untuk memulai petualangan mereka dengan Laravel.
Saya harap artikel ini memberikan wawasan yang bermanfaat bagi Anda. Jangan lupa untuk membagikannya kepada teman-teman Anda, sehingga mereka juga dapat mendapatkan informasi ini. Saya Irsyad, sampai bertemu di lain waktu.
Let's start living like no one can help us in any event, so that when we are helped in certain times, it becomes a plus in itself.