TeknoCerdas.com – Salam cerdas untuk kita semua. Framework PHP terpopuler saat ini Laravel merilis versi terbaru yaitu Laravel 8. Tepatnya pada tanggal 8 September 2020 yang lalu. Perlu dicatat bahwa Laravel 8 bukanlah versi Long Term Support (LTS). Laravel 8 akan mendapatkan perbaikan bug sampai 8 Maret 2021. Untuk dukungan perbaikan security sampai 8 September 2021.
Dilansir dari laman resminya fitur baru di Laravel 8 diantaranya.
- Laravel Jetstream
- Model Factory
- Migration Squashing
- Job Batching
- Peningkatan pada Rate Limiting
- Peningkatan pada Maintenance Mode
- Peningkatan pada Queue
- Komponen Dinamis pada Blade
- Tailwind Pagination View
- Time Testing Helper
- Peningkatan pada Artisan serve
Laravel Jetstream
Laravel Jetstream adalah sebuah utilitas kerangka pembuatan (scaffolding) untuk Laravel. Dengan Jetstream pengembang dapat menghemat waktu karena berbagai fitur-fitur utama yang ada pada sebuah web app secara otomatis tersedia dan siap digunakan.
Fitur-fitur tersebut diantaranya login, registrasi, verifikasi email, 2FA (two factor authentication), manajemen session, API via Laravel Sanctum dan manajemen team.
Laravel Jetstream menggantikan Laravel UI yang sebelumnya digunakan untuk melakukan scaffolding pembuatan web app.
Direktori app/Models
Karena permintaan yang cukup banyak dari komunitas maka sekarang default dari model berada didalam direktori app/Models
. Anda dapt melihatnya langsung lewat GitHub di branch master untuk perubahan ini.
Jika direktori app/Models
tidak ada maka diasumsikan model harus ditempakan di app/
direktori.
Model Factory
Saat melakukan unit testing di Laravel class Factory sangat membantu untuk melakukan generate dummy data. Model Factory pada Laravel 8 ditulis ulang dan mendapat beberapa peningkatan. Diantaranya dukungan penuh relationship dengan model class.
$this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
}
Karena developer pada class Model dapat menggunakan trait HasFactory
maka pada model factory dapat digunakan cara berikut.
count(50)->create();
Migration Squashing
Ketika jumlah file migrasi sudah sangat banyak hal tersebut sedikit banyak mempengaruhi kecepatan migrasi. Selain itu tidak jarang jika perubahan sudah mencapai puluhan atau ratusan file sudah hampir tidak ada yang ingin membaca dari pertama hingga migration terakhir. Jika menggunakan MySQL atau PostreSQL maka sekarang developer dapat melakukan “squash” atau menyatukan file-file migration tersebut menjadi hanya sebuah file SQL.
Perintah yang digunakan untuk melakukan migration squash.
$ php artisan schema:dump
Jika ingin melakukan dump sekaligus menghapus file migration tambahkan opsi --prune
.
$ php artisan schema:dump --prune
Hasil dump atau squash akan diletakkan pada direktori database/schema
. File SQL yang ada pada direktori tersebut akan dieksekusi terlebih dahulu sebelum file-file migration.
Job Batching
Job Batching memudahkan developer dalam mengeksekusi beberapa Jobs sekaligus kemudian melakukan langkah lanjutan dengan memanggil callback ketika semua Jobs selesai dieksekusi. Developer dapat menggunakan method Bus::batch()
untuk mengelompokkan Jobs.
use App\Jobs\ProcessPodcast;
use App\Podcast;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Batch;
use Throwable;
$batch = Bus::batch([
new ProcessPodcast(Podcast::find(1)),
new ProcessPodcast(Podcast::find(2)),
new ProcessPodcast(Podcast::find(3)),
new ProcessPodcast(Podcast::find(4)),
new ProcessPodcast(Podcast::find(5)),
])->then(function (Batch $batch) {
// All jobs completed successfully...
})->catch(function (Batch $batch, Throwable $e) {
// First batch job failure detected...
})->finally(function (Batch $batch) {
// The batch has finished executing...
})->dispatch();
return $batch->id;
Peningkatan pada Rate Limiting
Rate Limiting dapat didefiniskan dengan facade RateLimiter
menggunakan for
method. Method for
menerima argumen berupa nama dan Closure yang harus mengembalikan konfigurasi Rate Limiting menggunakan facade Limit
.
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('global', function (Request $request) {
return Limit::perMinute(1000);
});
Closure dari for
menerima instance dari object Request
sehingga konfigurasi dapat dibuat on-the-fly berdasarkan kriteria tertentu.
RateLimiter::for('uploads', function (Request $request) {
return $request->user()->vipCustomer()
? Limit::none()
: Limit::perMinute(100);
});
Untuk melakukan limit per alamat IP dapat digunakan method by
.
RateLimiter::for('uploads', function (Request $request) {
return $request->user()->vipCustomer()
? Limit::none()
: Limit::perMinute(100)->by($request->ip());
});
Peningkatan pada Maintenance Mode
Pada versi Laravel sebelumnya perintah artisan down
dapat di-bypass menggunakan “allow list” dari alamat IP yang diperbolehkan untuk mengakses aplikasi selama maintenance mode.
Fitur ini dihapus dan digantikan dengan penggunaan token.
$ php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
Token tersebut dapat digunakan untuk melakukan bypass maintenance mode dengan mengunjungi base URL dari aplikasi.
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515
Laravel akan membuat cookie dan meredirect ke halaman root /
. Cookie tersebut yang menjadi penanda bahwa website dapat digunakan seperti biasa.
Fitur baru yang ditambahkan adalah perlakuan khusus untuk segera menampilkan halaman ketika maintenance mode. Ini berguna jika saat maintance kemudian developer melakukan update lewat composer sehingga terkadang membuat pengguna masih melihat halaman yang sebenarnya.
Perintah yang digunakan untuk melakukan pre-render halaman maintance.
$ php artisan down --render="errors::503"
Peningkatan pada Queue
Terdapat method baru catch
yang digunakan untuk menangkap kesalahan ketika Closure yang dijalankan pada queue gagal.
use Throwable;
dispatch(function () use ($podcast) {
$podcast->publish();
})->catch(function (Throwable $e) {
// This job has failed...
});
Komponen Dinamis pada Blade
Terkadang ketika melakukan render sebuah komponen pada blade tidak diketahui komponen yang mana hingga sampai pada runtime. Pada situasi seperti ini developer dapat menggunakan fitur baru dari Blade yaitu dynamic-component
.
Tailwind Pagination View
Laravel Paginator sekarang secara default akan menggunakan Tailwind CSS framework. Untuk view yang menggunakan Bootstrap 3 dan Bootstrap 4 akan tetap tersedia.
Time Testing Helper
Ini fitur yang cukup unik karena memudahkan developer ketika berhubungan dengan pengaturan waktu saat melakukan unit testing. Class bawaan Laravel untuk tes sekarang mendukung modifikasi waktu menggunakan method travel
.
public function testTimeCanBeManipulated()
{
// Travel into the future...
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();
// Travel into the past...
$this->travel(-5)->hours();
// Travel to an explicit time...
$this->travelTo(now()->subHours(6));
// Return back to the present time...
$this->travelBack();
}
Peningkatan pada Artisan serve
Pada versi Laravel sebelumnya jika sebuah konfigurasi environment yang disimpan .env
diubah maka developer juga harus melakukan restart artisan serve
.
Kini pada Laravel 8 hal itu tidak diperlukan karena secara otomatis Laravel akan mendeteksi perubahan tanpa perlu intervensi manual untuk merestart local web server yang dijalankan dari artisan serve
.