skip to Main Content
Apa Yang Baru Di Laravel 9?  Simak 10 Updatenya Berikut Ini – Part 1

Apa Yang Baru di Laravel 9? Simak 10 Updatenya Berikut Ini – Part 1

Daftar Isi :

Apa Yang Baru di Laravel 9? 

Laravel telah menjadi salah satu framework PHP yang paling populer selama bertahun-tahun. Laravel itu elegant, scalable, dan telah diakui oleh para developer dan perusahaan yang bekerja menggunakan PHP. Rilis terbarunya adalah Laravel 9 dan hadir dengan banyak fitur baru.

Laravel 9 dijadwalkan akan rilis pada September 2021, kemudian rilis Laravel 9 diundur ke Januari 2022 (kemudian menjadi Februari 2022). Menjadikannya Long-Term Support (LTS) pertama setelah diperkenalkan 12-month release cycle. Keterlambatan rilis ini diakibatkan karena banyak alasan, yang meliputi beberapa hal seperti:

  1. Laravel menggunakan berbagai package berbasis komunitas serta 9 komponen Symfony untuk sejumlah fitur dalam framework. Symfony 6.0 dirilis pada November 2021. Penundaan ini akan memungkinkan tim Laravel untuk memasukkan versi baru Symfony ini sebagai bagian dari Laravel 9.
  2. Penundaan ini akan memberikan waktu bagi tim untuk memantau bagaimana Laravel berinteraksi dengan versi baru Symfony selama dua bulan. Ini juga memberi mereka ruang untuk memperbaiki perubahan yang merusak dan juga bug.
  3. Penundaan ini membuat tim Laravel lebih baik untuk rilis mendatang karena rilis tahunan Laravel akan selalu berlangsung dua bulan setelah rilis Symfony. Karena alasan tersebut, kita dapat melihat bahwa penundaan ini layak untuk ditunggu.

Fitur Baru Laravel 9

Sekarang, mari kita bahas fitur apa saja yang baru dari Laravel 9 ini:

1. Minimum PHP Requirement

Pertama dan yang paling penting, Laravel 9 Membutuhkan PHP 8 dan PHPunit 8 untuk testing. Karena Laravel 9 akan membutuhkan Symfony 6.0 dan memiliki persyaratan minimum PHP 8 yang berarti Laravel 9 akan memiliki persyaratan yang sama.

2. Design Baru untuk route:list

Command route:list sudah dimasukkan dalam Laravel untuk waktu yang lama, dan satu masalah yang kadang muncul adalah jika kita memiliki route yang besar dan kompleks, itu bisa menjadi berantakan saat mencoba melihatnya di konsol. Berkat pull request dari Nuno Maduro ini, route:list mendapatkan makeover.

Laravel 9 | Route list

3. New Test Coverage Option

Opsi baru ‘php artisan test –coverage’ akan menampilkan test coverage langsung di terminal. Ini juga mencakup –min’ opsi yang dapat kita gunakan untuk menunjukkan minimum threshold enforcement untuk test coverage.

Laravel 9 | php artisan test coverage

4. Anonymous Stub Migrations

Tahun lalu, Laravel 8.37 keluar dengan fitur baru bernama Anonymous Migrations. Fitur ini menyelesaikan masalah pada masalah github ini. Masalahnya adalah beberapa migrasi dengan nama kelas yang sama dapat menyebabkan masalah saat mencoba membuat ulang database dari awal. Fitur ini mencegah tabrakan nama kelas migrasi.

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {

/**
* Run the migrations.
*
* @return void
*/
   public function up()
   {
      Schema::table('people', function (Blueprint $table) {
      $table->string('first_name')->nullable();
      });
    };
};

Saat Laravel 9 diluncurkan, ini akan menjadi default saat kita menjalankan php artisan make:migration.

5.New Query Builder Interface

Laravel 9 akan menampilkan Query Builder Interface baru. Dan kamu bisa lihat detailnya di pull request ini. Untuk developer yang mengandalkan type hints untuk analisis statis, refactoring, atau menyelesaikan kode di IDE mereka, kurangnya shared interface or inheritance antara Query\Builder’, Eloquent\Builder’, dan Eloquent\Relation’ bisa sangat tricky:



return Model::query()
         ->whereNotExists(function($query) {
         // Query\Builder
         })
         ->whereHas('relation', function($query) {
         // Eloquent\Builder
         })
         ->with('relation', function($query) {
         // Eloquent\Relation
         });

Fitur ini menambahkan ‘Illuminate\Contracts\Database\QueryBuilder’ interface baru dan Illuminate\Database\Eloquent\Concerns\DecoratesQueryBuildersifat yang mengimplementasikan interface menggantikan __call’ implementasi yang ada.

6. Fungsi String PHP 8

Karena Laravel 9 menargetkan PHP 8, Laravel menggabungkan pull request ini , menyarankan menggunakan fungsi string PHP 8 terbaru. Fungsi-fungsi tersebut meliputi penggunaan  ‘str_contains()’, ‘str_starts_with()’, dan ‘str_ends_with()’ secara internal di dalam kelas ‘\Illuminate\Support\Str’.

7. Dari SwiftMailer ke Symfony Mailer

Rilis Laravel sebelumnya menggunakan library Swift Mailer untuk mengirim email keluar. Namun, library itu tidak lagi dipertahankan dan telah digantikan oleh Symfony Mailer. Silakan lihat upgrade guide untuk mempelajari lebih lanjut tentang memastikan aplikasi kalian kompatibel dengan Symfony Mailer.

8. Flysystem 3.x

Laravel 9.x upgrades upstream Flysystem dependency ke Flysystem 3.x. Flysystem menggerakkan semua interaksi sistem file yang ditawarkan oleh Storage facade.

9. Improved Eloquent Accessors / Mutators

Laravel 9.x menawarkan cara baru untuk mendefinisikan Eloquent accessors dan mutator. Dalam rilis Laravel sebelumnya, satu-satunya cara untuk mendefinisikan accessors dan mutators adalah dengan mendefinisikan metode awalan pada model kalian seperti:

public function getNameAttribute($value)
     returnstrtoupper($value);

}
public function setNameAttribute($value)
{
     $this->attributes['name'] =$value;
}

Namun, di Laravel 9.x kita dapat mendefinisikan accessors dan mutator menggunakan single, non-prefixed method dengan type-hinting sebuah return dari Illuminate\Database\Eloquent\Casts\Attribute:
use Illuminate\Database\Eloquent\Casts\Attribute;

public function name(): Attribute
{
     return new Attribute(
          get: fn ($value) => strtoupper($value),
          set: fn ($value) => $value,
     );
}
Selain itu, pendekatan baru untuk mendefinisikan accessors ini akan men-cache nilai objek yang dikembalikan oleh atribut, seperti  custom cast classes:
use App\Support\Address;
use Illuminate\Database\Eloquent\Casts\Attribute;

public function address(): Attribute
{
      return new Attribute(
         get: fn ($value, $attributes) => new Address(
            $attributes['address_line_one'],
            $attributes['address_line_two'],
         ),
         set: fn (Address $value) => [
            'address_line_one' => $value->lineOne,
            'address_line_two' => $value->lineTwo,
         ],
      );
}

10.Implicit Route Bindings With Enums

PHP 8.1 mulai men-support Enums . Laravel 9.x memperkenalkan kemampuan untuk type-hint Enum pada definisi route kalian dan Laravel hanya akan memanggil route jika segmen route tersebut adalah nilai Enum yang valid di URI. Jika tidak, respons HTTP 404 akan dikembalikan secara otomatis. Misalnya, diberikan Enum berikut:

enum Category: string
{
  caseFruits='fruits';
  casePeople='people';
}

Kalian dapat menentukan route yang hanya akan dipanggil jika {category} segmen route-nya adalah fruits atau people. Jika tidak, respon HTTP 404 akan dikembalikan:

Route::get('/categories/{category}', function (Category $category) {
     return$category->value;
});
Penulis : Aulia Brahmantio Diaz – Javascript Programmer Xsis Mitra Utama

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Back To Top