Menilik Fitur Baru Laravel 8

Laravel adalah salah satu framework PHP paling populer saat ini. Framework laravel memiliki konsep MVC yang akan memecah source code sesuai fungsi masing-masing. Pada awal bulan lalu, tepatnya pada 8 September 2020 Laravel merilis versi terbarunya, Laravel 8. Namun, versi ini bukanlah versi LTS (Long Term Support). Developer akan terus mengembangkan dan memperbaiki bugsnya selama satu tahun mendatang. Nah, TAS Official akan mengajak kalian untuk menilik fitur baru Laravel 8. Apa saja?

Laravel Jetstream dan Laravel Fortify

Laravel Jetstream adalah suat kerangka scafolding yang akan membantu kita dalam penyediaan fitur-fitur umum yang sering digunakan. Beberapa fitur bawaan ini meliputi :

  • Authentication (login, dashboard, logout, password reset)
  • Two factor authentication (fitur ini menarik, seperti Google Authenticator)
  • Browser session management
  • API token management (Menggunakan Laravel Sanctum dan adanya hak akses)
  • Full “teams” functionality (user bisa membuat team, undang user ke team, dll)
  • User profile
  • Delete account functionality

Lebih lanjut, fitur terbaru ini akan menggantikan Laravel UI pada versi terdahulunya.

Direktori app/Models

Pada Laravel 8, secara default model akan berada pada folder app/Models. Kita dapat melihatnya secara langsung pada Github Branch master. Hal ini karena tingginya permintaan dari komunitas. Jika kita sudah upgrade ke laravel 8 maka perintah php artisan make:model akan membuat model baru pada app/Models

Job Batching

Fitur menarik lainnya dari Laravel 8 adalah Job Batching. Melalui fitur ini developer dapat mengeksekusi banyak jobs kemudian memanggilnya dengan perintah callback ketika selesai. Contoh enggunaan bus::batch adalah sebagai berikut

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;

Migration Squashing

Perintah ini berfungsi untuk menyatukan file-file migration dalam satu file SQL. Fitur ini mendukung dua database management system besar yakni MySQL dan PostgreSQL. Perintah untuk melakukan migration squashing adalah sebagai berikut:

$ php artisan schema:dump

Perintah ini dapat sekaligus melakukan dump dan menghapus file migration dengan menambah parameter prune

$ php artisan schema:dump --prune

File hasil squash akan tersimpan dalam app/schema

Model Factory

Laravel melakukan banyak peningkatan pada model factory. Model Factory pada versi ini memberikan dukungan penuh pada relationship pada model kelas. Salah satu contoh penggunaannya adalah sebagai berikut:

<?php

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $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),
        ];
    }
}

Model ini menambahkan trait hasFactory, sehingga kita dapat menggunakan perintah berikut ini pada model Factory :

<?php
use App\Models\User;

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

Maintenance Mode Yang Lebih Baik

Pada versi terdahulu, artisan-down dapat dilewatkan dengan perintah allow-list. Perintah allow-list ini dapat mendaftarkan alamat IP-Addres komputer untuk mengakses selama mode maintenance. Sedangkan pada Laravel 8 perintah ini diganti dengan token.

$ php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"

Untuk mengaksesnya, kita harus melewatkannya pada URL setelah domain utama. Misal

https://teknosejahtera.co.id/1630542a-246b-4b66-afa1-dd72a4c43515

Selain itu juga menambahkan perlakuan khusus agar segera menampilkan halaman ketika maintenance mode. Hal ini memungkinkan untuk developer melakukan update melalui composer dan pengguna langsung dapat melihat hasil update ini (pre-render). Perintah untuk melakukan pre-render adalah

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

Rate Limiting

Pada Laravel 8, Rate Limiting dapat dilakukan melalui facade. Perintah untuk melakukan Rate Limiting adalah sebagai berikut

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

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

Untuk memanggil Rate Limiting dapat dilakukan menggunakan Middleware Throtle

Route::get('/login')->middleware(['throttle:authentication']);

Time Testing Helpers

Fitur Time Testing Helper akan memudahkan kita dalam melakukan pengolahan waktu saat unit testing. Bahasa ini mendukung modifikasi waktu dengan perintah travel.

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

Wah, kaya time travelers ya!

Peningkatan Artisan Serve

Laravel 8 secara otomatis akan mendeteksi konfigurasi environment tanpa harus melakukan restart pada php artisan serve

Nah, setelah menilik fitur baru laravel 8, apakah kalian tertarik mencobanya?

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *