Mengenal Fitur-Fitur Baru di Laravel Versi 8

Laravel 8 sudah rilis pada 8 september 2020. Laravel 8 melanjutkan penyempurnaan yang telah dibuat pada versi sebelumnya yaitu versi 7.x dengan memperkenalkan Laravel Jetstream, model factory classes, migration squashing, job batching, improved rate limiting, queue improvements, dynamic Blade components, Tailwind pagination views, time testing helpers, improvements to artisan serve, event listener improvements, and a variety of other bug fixes and usability improvements.

Banyak banget 😅

Yups, memang pada laravel 8 banyak fitur dan perubahan baru yang harus kita ketahui.

Tapi tenang, kita akan coba lihat satu persatu sebelum kita berpindah dari Laravel 7.x ke Laravel 8.

Laravel Jetstream

Laravel 8 menggunakan jetstream untuk scaffoldingnya, tidak seperti sebelumnya yang menggunakan bootstrap, react atau vue. Perubahan scaffolding ini juga berdampak pada penambahan beberapa fitur seperti login, registration, email verification, two-factor authentication, session management, API support via Laravel Sanctum dan optional team management.

Jetstream sendiri didesain menggunakan Tailwind CSS dan memberikan pilihan untuk scaffolding yaitu Livewire atau Inertia.

Models Directory

Berbeda dengan versi sebelumnya dimana Model diletakkan langsung dibawah direktori app pada laravel 8 model dibuatkan direktori sendiri yaitu app\Models.

Pada versi sebelumnya jika kita ingin memanggil model User dapat dilakukan dengan:

use App\User;

Maka pada laravel 8 kita memanggil model User dengan baris seperti berikut:

use App\Models\User;

Model Factory Classes

Pada laravel 8, model factory sudah berbasis kelas (class based), yang menyebabkan sedikit perubahaan sintaks untuk menggunakan model factory.

Pada versi sebelumnya kita dapat menggunakan model factory dengan sintaks berikut:

factory(User::class, 70)->create();

Sintaks untuk menggunakan model factory pada laravel 8 menjadi:

User::factory()->count(70)->create();

Perubahan ini membuat penggunaan model factory lebih simpel karena sudah class based dibandingkan dengan versi sebelumnya .

Migration Squashing

Ketika kita mengembangkan aplikasi dengan laravel, kita mungkin akan memiliki berkas migration yang banyak. Hal ini akan menyebabkan direktori migrations kita akan membengkak dengan banyaknya file migration.

Jika kita menggunakan MySQL atau PostgreSQL mungkin kita perlu “squash” semua migration kita menjadi sebuah file SQL.

Laravel 8 menambahkan perintah php artisan schema:dump untuk melakukan “squash” terhadap file migration pada projek laravel kita. Ketika menjalankan perintah tersebut, laravel akan membuah file dump SQL dari migration kita.

Jika kita ingin menghapus semua file migration sekaligus maka dapat menggunakan perintah:

php artisan schema:dump --prune

Perintah di atas akan otomatis membuat file dump SQL dan menghapus file migration.

Ketika kita sudah menjalankan perintah schema:dump dan melakukan migrate database dan tidak ada file migration yang akan di eksekusi, maka laravel pertama sekali akan mengeksekusi file SQL dari hasil dump tadi dan selanjutnya baru mengeksekusi semua file migration yang tersisa yang tidak termasuk kedalam schema file dump SQL yang telah dibuat.

Job Batching

Job Batching pada laravel mengizinkan kita untuk mengeksekusi sekumpulan pekerjaan (job) dengan mudah. Pada laravel 8 fitur job batching dapat dilakukan lebih mudah dengan perintah:

Bus::batch();

Improved Rate Limiting

Rate Limiting pada laravel 8 merupakan pengembangan dari versi sebelumnya untuk membatasi request. Pembatasan tersebut ditentukan dengan menggunakan RateLimiter dengan sintaks:

RateLimiter::for('global', function(Request $request) {
    return Limit::perMinute(1000);
});

Improved Maintenance Mode

Kali ini mode maintenance memiliki perubahan yang cukup membantu kita para programmer ketika melakukan maintenance.

Pada laravel versi sebelumnya ketika kita menjalankan perintah php artisan down maka aplikasi kita tidak dapat diakses secara total. Tetapi pada laravel 8 memberikan opsi agar kita dapat mengakses aplikasi meskipun dalam mode maintenance dengan menggunakan kode rahasia.

Penggunaannya seperti berikut:

php artisan down --secret="koderahasia"

koderahasia dapat diisi dengan apapun sesuka kita yang nantinya akan kita gunakan untuk mengakses aplikasi kita dalam keadaan maintenance.

Contoh:

php artisan down --secret="mantraajaib"

Ketika kita ingin mengakses aplikasi kita yang dalam kondisi maintenance maka dapat diakses dengan:

https://example.com/mantraajaib

Maka aplikasi kita akan berjalan normal, tetapi jika hanya mengakses https://example.com maka aplikasi tidak berjalan atau masih dalam mode maintenance.

Selain itu kita juga dapat menampilkan view yang ingin kita tampilkan kepada user ketika aplikasi dalam mode maintenance dengan perintah:

php artisan down --render="errors:503"

Perintah diatas akan otomatis merender template 503 dan ditampilkan kepada user.

Closure Dispatch / Catch

Dengan menggunakan metode catch terbaru memungkinkan kita untuk memberikan closure yang akan dieksekusi jika antrian closure fails selesai dijalankan dengan sukses.

Pada laravel 8 kita dapat menggunakan method catch terbaru seperti berikut:

use Throwable;

dispatch(function () use ($podcast) {
    $podcast->publish();
})->catch(function (Throwable $e) {
    // perintah yang akan dijalankan jika gagal
});

Dynamic Blade Components

Terkadang kita mungkin butuh untuk merender sebuah komponen tetapi kita tidak tahu komponen mana yang akan dirender hingga program berhasil dijalankan.

Pada kondisi ini kita dapat menggunakan komponen dinamis bawaan laravel untuk merender komponen berdasarkan runtime value atau variabel.

Penggunaannya seperti berikut:

<x-dynamic-component :component="$componentName" class="mt-4" />

Event Listener Improvements

Penggunaan event listener pada laravel 8 kini lebih mudah dengan sintaks seperti berikut:

use App\Events\PodcastProcessed;
use Illuminate\Support\Facades\Event;

Event::listen(function (PodcastProcessed $event) {
    //
});

Time Testing Helpers

Ketika melakukan testing, kita mungkin butuh memanipulasi waktu saat ini. Laravel 8 sudah menyediakan fitur helper untuk melakukan hal tersebut. Fitur ini terinspirasi dari Ruby on Rails.

Penggunaan helper untuk memanipulasi waktu saat ini sebagai berikut:

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();
}

Artisan serve Improvements

Pada laravel 8, perintah Artisan serve mengalami perubahan dimana akan otomatis melakukan reloading ketika kita melakukan perubahan pada file .env.

Hal ini sangat berbeda dari versi sebelumnya dimana kita harus mematikan dan menjalankan ulang artisan serve secara manual ketika melakukan perubahan pada file .env.

Tailwind Pagination Views

Pagination pada laravel 8 mengalami perubahan dibandingkan versi sebelumnya. Pada laravel 8 pagination secara default menggunakan framework Tailwind CSS.

Namun bagi kita yang belum bisa move on dari Bootstrap kita masih dapat menggunakan tampilan bootstrap kok.

Kita perlu menambahkan baris di bawah pada AppServiceProvider untuk menggunakan tampilan bootstrap:

public function boot()
{
    Paginator::useBootstrap();
}

Routing Namespace Updates

Jika pada laravel versi sebelumnya kita melakukan pendefinisian route menggunakan sintaks seperti di bawah:

Route::get('/user', 'UserController@index');

Pada laravel 8 pendefinisian route berubah menjadi:

use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

Hal ini terjadi karena properti $namespace pada RouteServiceProvider pada laravel 8 secara default adalah null.

Laravel Installer

Laravel 8 sekarang menggunakan installer versi 4, pada laravel versi sebelumnya menggunakan installer versi 3.x. Jadi buat kalian yang ingin migrasi ke laravel 8 kalian bisa update installernya ke versi 4 terlebih dahulu dengan perintah:

composer global update laravel/installer

Kesimpulan

Kita sudah melihat beberapa perubahan yang dilakukan pada laravel versi 8. Semoga artikel ini membantu bagi kalian yang ingin migrasi ke laravel 8.

Panduan lebih lengkap untuk melakukan migrasi atau mengupgrade projek kalian ke laravel versi 8 dapat dilihat pada dokumentasi laravel.

Jika ada pembahasan yang kurang lengkap silakan mengunjungi dokumentasi resmi laravel.

Semangat belajar… sampai jumpa 😄