Laravel 9: Fitur Terbaru dan Cara Menggunakannya

Laravel 9 adalah versi major terbaru dari framework PHP populer ini, menghadirkan berbagai peningkatan performa, fitur baru yang menarik, dan fokus pada pengalaman developer yang lebih baik. Apakah Anda seorang developer Laravel berpengalaman atau baru memulai, panduan komprehensif ini akan membahas Laravel 9: Fitur Terbaru dan Cara Menggunakannya secara mendalam, membantu Anda memanfaatkan semua yang ditawarkannya. Mari kita selami!

1. Pengantar Laravel 9: Evolusi Framework PHP Terpopuler

Laravel terus berkembang, dan Laravel 9 menandai tonggak penting dalam evolusinya. Rilis ini berfokus pada pemanfaatan fitur PHP yang lebih baru, meningkatkan performa, dan menyederhanakan proses pengembangan. Dengan dukungan resmi PHP 8, Laravel 9 membuka pintu bagi peningkatan performa signifikan dan sintaksis yang lebih modern. Sebelum kita membahas fitur-fitur detailnya, mari kita pahami mengapa upgrade ke Laravel 9 adalah ide yang bagus.

Alasan utama untuk beralih ke Laravel 9 adalah:

  • Dukungan PHP 8: Laravel 9 memanfaatkan fitur dan performa PHP 8 (dan yang lebih baru, seperti PHP 8.1) untuk memberikan aplikasi yang lebih cepat dan efisien.
  • Long-Term Support (LTS): Laravel 9 adalah rilis LTS, yang berarti akan menerima perbaikan bug dan pembaruan keamanan hingga Februari 2024, dan pembaruan keamanan hingga Februari 2025. Ini memberikan stabilitas dan ketenangan pikiran bagi proyek Anda.
  • Fitur-Fitur Baru: Laravel 9 memperkenalkan berbagai fitur baru yang dirancang untuk meningkatkan produktivitas dan pengalaman developer.

Jadi, siap untuk menjelajahi fitur-fitur keren yang ditawarkan Laravel 9? Lanjutkan membaca!

2. Persyaratan Sistem dan Proses Upgrade ke Laravel 9

Sebelum Anda mulai menggunakan Laravel 9: Fitur Terbaru dan Cara Menggunakannya, penting untuk memastikan sistem Anda memenuhi persyaratan dan mengetahui langkah-langkah upgrade dari versi Laravel sebelumnya.

Persyaratan Sistem:

  • PHP 8.0 atau lebih tinggi
  • Composer 2.0 atau lebih tinggi
  • Ekstensi PHP yang diperlukan (seperti PDO, OpenSSL, dll.) – lihat dokumentasi Laravel untuk daftar lengkap.

Proses Upgrade:

Upgrade ke Laravel 9 bisa menjadi proses yang cukup mudah, tetapi penting untuk mengikuti langkah-langkah yang direkomendasikan untuk menghindari masalah.

  1. Backup Aplikasi Anda: Langkah pertama yang paling penting adalah membackup seluruh aplikasi Anda, termasuk database dan file. Ini memungkinkan Anda untuk mengembalikan aplikasi Anda ke keadaan semula jika terjadi kesalahan selama proses upgrade.

  2. Periksa Panduan Upgrade Resmi: Laravel menyediakan panduan upgrade yang komprehensif di situs web resmi mereka. Panduan ini merinci semua perubahan yang diperlukan dan memberikan instruksi langkah demi langkah. [Link ke Dokumentasi Upgrade Laravel Resmi] (Anda harus memasukkan link yang benar di sini, contoh: https://laravel.com/docs/9.x/upgrade).

  3. Update Dependencies Composer: Edit file composer.json aplikasi Anda dan perbarui versi Laravel framework dan paket terkait ke versi 9.*.

    "laravel/framework": "^9.0",
    "laravel/sanctum": "^3.0",
    "nunomaduro/collision": "^6.0",
  4. Jalankan composer update: Setelah Anda memperbarui dependencies, jalankan perintah composer update untuk mengunduh dan menginstal versi terbaru dari paket-paket yang diperlukan.

  5. Uji Aplikasi Anda: Setelah upgrade selesai, sangat penting untuk menguji aplikasi Anda secara menyeluruh untuk memastikan semuanya berfungsi dengan benar. Perhatikan error, peringatan, dan potensi masalah kompatibilitas.

  6. Perbarui Konfigurasi: Laravel 9 mungkin memperkenalkan perubahan konfigurasi. Bandingkan file konfigurasi Anda dengan file konfigurasi default baru yang disediakan di repositori Laravel 9 untuk memastikan Anda tidak kehilangan pengaturan penting.

Penting: Selalu baca catatan rilis dan panduan upgrade dengan seksama untuk mengidentifikasi perubahan yang mungkin memengaruhi aplikasi Anda.

3. Fitur Baru: PHP 8 String Functions di Route Definitions

Salah satu fitur menarik yang dihadirkan oleh Laravel 9: Fitur Terbaru dan Cara Menggunakannya adalah penggunaan str_contains(), str_starts_with(), dan str_ends_with() di dalam definisi rute. Ini menawarkan cara yang lebih bersih dan ekspresif untuk mendefinisikan rute berdasarkan pencocokan string.

Contoh:

use IlluminateSupportFacadesRoute;

Route::get('/posts/{id}', function ($id) {
    // Hanya tangani ID yang dimulai dengan 'post-'
})->where('id', 'starts_with:post-');

Route::get('/categories/{category}', function ($category) {
    // Hanya tangani kategori yang mengandung 'blog'
})->where('category', 'contains:blog');

Route::get('/files/{filename}', function ($filename) {
    // Hanya tangani file yang berakhiran '.pdf'
})->where('filename', 'ends_with:.pdf');

Sebelumnya, Anda mungkin perlu menggunakan ekspresi reguler yang lebih kompleks untuk mencapai hasil yang sama. Sekarang, dengan fungsi string ini, kode rute Anda menjadi lebih mudah dibaca dan dipahami. Ini adalah contoh bagus tentang bagaimana Laravel terus menyederhanakan tugas-tugas umum pengembangan.

4. Enums dalam Eloquent: Cara Baru Menangani Data dengan Laravel 9

Laravel 9 memperkenalkan dukungan native untuk PHP Enums dalam Eloquent attribute casting. Ini adalah fitur yang sangat berguna untuk merepresentasikan data statis dan tipe-tipe terbatas dalam model Anda.

Apa itu Enum?

Enum (Enumeration) adalah tipe data yang memungkinkan Anda untuk mendefinisikan sekumpulan nilai yang mungkin untuk suatu variabel. Misalnya, Anda bisa membuat Enum untuk status pesanan (Pending, Processing, Shipped, Delivered, Canceled).

Cara Menggunakan Enum di Eloquent:

  1. Buat Enum: Pertama, Anda perlu membuat kelas Enum.

    <?php
    
    namespace AppEnums;
    
    enum OrderStatus: string
    {
        case Pending = 'pending';
        case Processing = 'processing';
        case Shipped = 'shipped';
        case Delivered = 'delivered';
        case Canceled = 'canceled';
    }
  2. Definisikan Cast di Model: Selanjutnya, definisikan cast di model Eloquent Anda.

    <?php
    
    namespace AppModels;
    
    use AppEnumsOrderStatus;
    use IlluminateDatabaseEloquentModel;
    
    class Order extends Model
    {
        protected $casts = [
            'status' => OrderStatus::class,
        ];
    }
  3. Gunakan Enum: Sekarang Anda dapat menggunakan Enum di model Anda.

    $order = Order::find(1);
    
    // Mendapatkan status sebagai Enum
    $status = $order->status; // OrderStatus::Pending
    
    // Memeriksa status
    if ($order->status === OrderStatus::Shipped) {
        // ...
    }
    
    // Mengubah status
    $order->status = OrderStatus::Delivered;
    $order->save();

Manfaat Menggunakan Enum:

  • Keamanan Tipe: Enum memastikan bahwa hanya nilai yang valid yang dapat ditetapkan ke atribut.
  • Kemudahan Dibaca: Kode Anda menjadi lebih mudah dibaca dan dipahami.
  • Refactoring Lebih Mudah: Mengubah nilai Enum lebih mudah dan aman daripada mengubah nilai string atau integer secara langsung.

Fitur ini sangat berguna untuk menjaga konsistensi data dan meningkatkan keandalan aplikasi Anda.

5. Controller Route Group: Organisasi Rute yang Lebih Baik

Laravel 9: Fitur Terbaru dan Cara Menggunakannya memperkenalkan cara baru untuk mendefinisikan grup rute dengan menggunakan controller sebagai awalan. Ini membantu Anda untuk mengatur rute Anda dengan lebih baik dan mengurangi boilerplate code.

Contoh:

use AppHttpControllersUserController;
use IlluminateSupportFacadesRoute;

Route::controller(UserController::class)->group(function () {
    Route::get('/users', 'index');
    Route::get('/users/{id}', 'show');
    Route::post('/users', 'store');
    Route::put('/users/{id}', 'update');
    Route::delete('/users/{id}', 'destroy');
});

Dalam contoh ini, semua rute di dalam grup akan secara otomatis menggunakan UserController sebagai controller. Ini berarti Anda tidak perlu lagi menentukan controller untuk setiap rute secara individual. Ini membuat kode rute Anda lebih ringkas dan mudah dikelola.

Keuntungan:

  • Kode Lebih Ringkas: Mengurangi boilerplate code dengan menghilangkan kebutuhan untuk menentukan controller untuk setiap rute.
  • Organisasi Lebih Baik: Memudahkan untuk mengelompokkan rute yang terkait dengan controller tertentu.
  • Kemudahan Pemeliharaan: Membuat kode rute lebih mudah dipelihara dan di-refactor.

6. Typed Properties: Meningkatkan Kejelasan dan Keamanan Kode

Laravel 9 mendorong penggunaan typed properties di seluruh codebase. Typed properties adalah properti kelas yang dideklarasikan dengan tipe data eksplisit. Ini membantu meningkatkan kejelasan kode, mencegah kesalahan tipe, dan meningkatkan reliabilitas aplikasi Anda.

Contoh:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Product extends Model
{
    public string $name;
    public int $price;
    public ?string $description; // nullable
}

Dengan mendeklarasikan tipe data untuk properti $name, $price, dan $description, Anda memastikan bahwa hanya nilai dengan tipe data yang sesuai yang dapat ditetapkan ke properti tersebut. Jika Anda mencoba menetapkan nilai dengan tipe data yang salah, PHP akan melempar error.

Manfaat Typed Properties:

  • Deteksi Error Lebih Awal: Error tipe terdeteksi selama pengembangan, bukan saat runtime.
  • Kode Lebih Jelas: Tipe data yang eksplisit membuat kode lebih mudah dibaca dan dipahami.
  • Peningkatan Reliabilitas: Mencegah error tipe meningkatkan reliabilitas aplikasi Anda.
  • Dukungan IDE Lebih Baik: IDE dapat memberikan saran dan validasi yang lebih akurat berdasarkan tipe data yang dideklarasikan.

7. Anonymous Stub Migrations: Migrasi yang Lebih Rapi

Laravel 9 memperkenalkan fitur “anonymous stub migrations”. Sebelumnya, saat membuat migrasi, Laravel akan memberikan nama kelas berdasarkan timestamp dan nama migrasi yang Anda berikan. Ini bisa menyebabkan masalah jika Anda memiliki beberapa migrasi dengan nama yang sama, karena class name collision.

Dengan anonymous stub migrations, Laravel menggunakan class anonymous yang tidak memiliki nama. Ini menghindari potensi masalah class name collision dan membuat codebase Anda lebih rapi.

Cara Kerja:

Saat Anda menjalankan perintah php artisan make:migration create_users_table, Laravel 9 akan menghasilkan file migrasi dengan class anonymous.

<?php

use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
};

Perhatikan bahwa tidak ada nama class yang didefinisikan. Ini membuat migrasi Anda lebih portabel dan mengurangi kemungkinan konflik.

8. Full Text Indexes dan Where Clauses: Pencarian Lebih Cepat dan Efisien

Laravel 9 meningkatkan dukungan untuk full text indexes di database MySQL dan PostgreSQL. Full text indexes memungkinkan Anda untuk melakukan pencarian teks yang lebih cepat dan relevan dibandingkan dengan pencarian LIKE biasa.

Cara Membuat Full Text Index:

Anda dapat membuat full text index menggunakan blueprint Schema Builder.

Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('body');
    $table->fullText('title', 'body'); // Membuat full text index pada kolom title dan body
    $table->timestamps();
});

Menggunakan whereFullText:

Laravel 9 juga memperkenalkan method whereFullText di query builder untuk melakukan pencarian full text.

$articles = Article::whereFullText('title', 'Laravel 9')->get();

$articles = Article::whereFullText(['title', 'body'], 'Laravel')->get(); // Pencarian di multiple column

Ini adalah cara yang ampuh untuk meningkatkan performa pencarian teks di aplikasi Anda.

9. Rendering Blade Components dengan Slots: Kontrol Lebih Besar pada Layout

Laravel 9 menyempurnakan cara Anda merender Blade components dengan menggunakan slots. Slots memungkinkan Anda untuk mendefinisikan area placeholder di dalam component yang dapat diisi dengan konten dinamis dari template yang menggunakan component tersebut.

Contoh:

Component (components/Alert.blade.php):

<div class="alert alert-{{ $type }}">
    <strong>{{ $title }}</strong>
    <div>{{ $slot }}</div>
</div>

Template yang Menggunakan Component:

<x-alert type="success" title="Sukses!">
    Pesan ini berhasil ditampilkan!
</x-alert>

Dalam contoh ini, konten di antara tag <x-alert> akan dimasukkan ke dalam $slot di dalam component Alert.

Named Slots:

Anda juga dapat menggunakan named slots untuk mendefinisikan beberapa area placeholder di dalam component.

Component (components/Card.blade.php):

<div class="card">
    <div class="card-header">{{ $header }}</div>
    <div class="card-body">{{ $slot }}</div>
    <div class="card-footer">{{ $footer }}</div>
</div>

Template yang Menggunakan Component:

<x-card>
    <x-slot name="header">
        Judul Card
    </x-slot>

    Isi Card di sini...

    <x-slot name="footer">
        &copy; 2023
    </x-slot>
</x-card>

Dengan menggunakan slots, Anda memiliki kontrol yang lebih besar pada layout dan konten yang ditampilkan di dalam Blade components.

10. Laravel Breeze API dan Next.js: Stack Modern untuk Aplikasi Web

Laravel Breeze, starter kit otentikasi sederhana, kini hadir dengan opsi untuk scaffolding aplikasi API dengan Next.js sebagai frontend. Ini memberikan Anda dasar yang kokoh untuk membangun aplikasi web modern dengan pemisahan frontend dan backend yang jelas.

Manfaat:

  • Pengembangan Lebih Cepat: Mulai dengan scaffolding siap pakai untuk otentikasi dan API.
  • Frontend dan Backend Terpisah: Memungkinkan Anda untuk mengembangkan dan menyebarkan frontend dan backend secara independen.
  • Performa Lebih Baik: Next.js menyediakan performa rendering sisi server (SSR) yang lebih baik.
  • Ekosistem JavaScript yang Kaya: Manfaatkan ekosistem JavaScript yang luas dengan Next.js.

Untuk menggunakan fitur ini, jalankan perintah:

composer require laravel/breeze --dev

php artisan breeze:install api

npm install
npm run dev

Kemudian, instal dan konfigurasi Next.js. Lihat dokumentasi Laravel Breeze untuk instruksi lebih detail.

11. Fitur Lainnya dan Peningkatan Performa di Laravel 9

Selain fitur-fitur yang telah disebutkan, Laravel 9: Fitur Terbaru dan Cara Menggunakannya juga mencakup sejumlah peningkatan performa dan fitur kecil lainnya, termasuk:

  • Peningkatan Performa Eloquent: Optimasi di Eloquent ORM menghasilkan kueri yang lebih cepat.
  • Validasi Bersyarat yang Ditingkatkan: Kemampuan validasi bersyarat yang lebih fleksibel.
  • Peningkatan Interface: Beberapa perubahan kecil pada interface dan helper functions.
  • Pembaruan Dependencies: Pembaruan ke versi terbaru dari berbagai dependencies.

Pastikan untuk membaca catatan rilis resmi Laravel 9 untuk daftar lengkap perubahan dan peningkatan.

12. Kesimpulan: Mengapa Anda Harus Menggunakan Laravel 9

Laravel 9: Fitur Terbaru dan Cara Menggunakannya menawarkan sejumlah peningkatan signifikan dibandingkan versi Laravel sebelumnya. Dukungan PHP 8, fitur-fitur baru yang berfokus pada pengalaman developer, dan peningkatan performa menjadikan Laravel 9 pilihan yang sangat baik untuk proyek baru dan upgrade aplikasi yang sudah ada.

Dengan menggunakan fitur-fitur seperti PHP Enums, Controller Route Group, Typed Properties, dan Full Text Indexes, Anda dapat meningkatkan kejelasan kode, mengurangi boilerplate, dan meningkatkan performa aplikasi Anda. Selain itu, integrasi Laravel Breeze dengan Next.js memberikan Anda dasar yang kokoh untuk membangun aplikasi web modern dengan pemisahan frontend dan backend yang jelas.

Jadi, tunggu apa lagi? Mulailah menjelajahi Laravel 9 dan manfaatkan semua yang ditawarkannya untuk membangun aplikasi web yang lebih baik! Jangan lupa untuk selalu merujuk ke dokumentasi resmi Laravel untuk informasi lebih lanjut dan panduan mendalam. Selamat mencoba!