Banner - Cara Membuat Middleware Custom di Laravel

Cara Membuat Middleware Custom di Laravel

Saat membangun aplikasi web dengan Laravel, terkadang fitur bawaan framework belum cukup untuk memenuhi kebutuhan proyek. Dalam kondisi seperti ini, membuat middleware custom dapat menjadi solusi untuk menambahkan logika tertentu, seperti autentikasi, pengecekan hak akses, hingga pencatatan aktivitas pengguna.

Middleware bekerja sebagai lapisan yang memproses request sebelum diteruskan ke aplikasi. Dengan memahami cara kerja dan proses pembuatannya, Anda dapat mengatur alur request sesuai kebutuhan tanpa mengubah kode utama aplikasi.

Pada artikel ini, kita akan membahas konsep middleware, cara kerjanya, serta langkah-langkah membuat middleware custom di Laravel.

Apa Itu Middleware?

Middleware adalah lapisan perantara yang digunakan Laravel untuk memproses dan menyaring HTTP request sebelum diteruskan ke controller. Middleware dapat memeriksa kondisi tertentu pada setiap request, kemudian menentukan apakah request tersebut boleh dilanjutkan, ditolak, atau perlu diproses terlebih dahulu.

Sederhananya, middleware dapat dianalogikan seperti petugas keamanan di pintu masuk. Sebelum pengunjung masuk ke sebuah gedung, petugas akan memeriksa apakah pengunjung memiliki izin. Jika memenuhi syarat, pengunjung diperbolehkan masuk. Jika tidak, akses dapat ditolak.

Dalam Laravel, middleware bekerja dengan konsep yang serupa. Ketika pengguna mengakses sebuah URL, request akan melewati middleware terlebih dahulu sebelum sampai ke controller. Misalnya, middleware dapat digunakan untuk memeriksa apakah pengguna sudah login, memiliki hak akses tertentu, atau mengirim request dalam jumlah yang wajar.

Promo Hosting Murah Rumahweb

Laravel juga menyediakan berbagai middleware bawaan, seperti auth untuk memeriksa autentikasi pengguna dan throttle untuk membatasi jumlah request. Namun, setiap aplikasi dapat memiliki kebutuhan yang berbeda. Jika middleware bawaan belum memenuhi kebutuhan tersebut, Anda dapat membuat middleware custom untuk menerapkan aturan atau logika sesuai kebutuhan aplikasi.

Manfaat Membuat Middleware Custom di Laravel

Membuat middleware custom bukan sekadar praktik teknis, tetapi juga strategi arsitektur yang berdampak langsung pada kualitas kode dan keamanan aplikasi. Berikut beberapa manfaat utamanya:

  1. Kode lebih terstruktur dan mudah dipelihara Logika validasi atau pengecekan yang sebelumnya ditulis berulang di banyak controller dapat dipusatkan dalam satu middleware, sehingga kode menjadi lebih rapi dan konsisten.
  2. Keamanan aplikasi lebih terjamin Middleware custom memungkinkan anda menambahkan lapisan proteksi tambahan, misalnya validasi token, pembatasan IP, atau pengecekan status akun pengguna sebelum request diteruskan.
  3. Fleksibilitas tinggi terhadap kebutuhan bisnis setiap proyek memiliki aturan bisnis yang berbeda. Middleware custom memberi ruang untuk menerapkan aturan tersebut tanpa mengubah logika inti aplikasi.
  4. Mendukung skalabilitas proyek saat aplikasi berkembang, middleware dapat digunakan kembali di berbagai route atau grup route lain, sehingga proses pengembangan menjadi lebih efisien.

Memahami Cara Kerja Middleware

Untuk dapat membuat middleware yang efektif, penting memahami di mana posisi middleware dalam lifecycle request Laravel. Secara garis besar, alurnya sebagai berikut:

  1. Request masuk ke aplikasi melalui file public/index.php.
  2. Request diteruskan ke HTTP Kernel, yang bertugas menjalankan seluruh middleware yang terdaftar.
  3. Middleware diproses secara berurutan sesuai konfigurasi, baik middleware global, grup, maupun middleware yang ditempel langsung pada route.
  4. Setelah lolos semua middleware, request diteruskan ke controller untuk diproses lebih lanjut.
  5. Response dari controller dapat kembali melewati middleware sebelum akhirnya dikirim ke pengguna.

Konsep penting yang perlu dipahami adalah middleware bekerja seperti lapisan bawang. Setiap middleware dapat menjalankan logika sebelum request diteruskan maupun setelah response dihasilkan menggunakan fungsi $next($request) sebagai penghubung antar lapisan.

Membuat Middleware Custom di Laravel

Berikut langkah – langkah verifikasi untuk membuat middleware custom di laravel, mulai dari pembuatan file hingga pendaftaran middleware.

Step 1. Membuat File Middleware

Gunakan perintah Artisan berikut melalui terminal:

php artisan make:middleware CekStatusAkun

Perintah ini akan menghasilkan file baru di direktori

app/Http/Middleware/CekStatusAkun.php.

Step 2. Menulis Logika Middleware

Buka file yang baru dibuat, lalu tambahkan logika sesuai kebutuhan. Contoh sederhana untuk memeriksa status akun pengguna:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CekStatusAkun
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->user() && $request->user()->status !== 'aktif') {
            return response()->json([
                'message' => 'Akun Anda tidak aktif.'
            ], 403);
        }

        return $next($request);
    }
}

Pada contoh di atas, middleware akan menghentikan request dan mengembalikan response error jika status akun pengguna tidak aktif.

Step 3. Mendaftarkan Middleware

Middleware yang baru dibuat perlu didaftarkan agar dapat digunakan. Untuk Laravel versi 10 ke bawah, pendaftaran dilakukan di file app/Http/Kernel.php:

protected $routeMiddleware = [
    // middleware lain...
    'cek.status' => \App\Http\Middleware\CekStatusAkun::class,
];

Sementara pada Laravel 11 ke atas, pendaftaran dilakukan melalui file bootstrap/app.php menggunakan method withMiddleware(). jangan lupa import middlewarenya diatas sendiri
use App\Http\Middleware\CekStatusAkun;

->withMiddleware(function (Middleware $middleware): void {
     $middleware->alias([
        'cek.status' => CekStatusAkun::class,
    ]);
    })

Step 4. Membuat Controller

Silahkan membuat dashboardController dengan perintah berikut:

php artisan make:controller DashboardController

Kemudian di DashboardController buat seperti berikut :

public function index()
    {
        return response()->json([
            'message' => 'Selamat datang di dashboard!'
        ]);
    }

Step 5. Menerapkan Middleware pada Route

Setelah terdaftar, middleware dapat digunakan pada route tertentu yang dapat di setting pada folder routes file web.php :

use App\Http\Controllers\DashboardController;
Route::get('/dashboard', [DashboardController::class, 'index'])
    ->middleware('cek.status');

Step 6. Setting .env dan Tambahkan Table Status Pada Database User Default

Pada file .env rubah konfigurasi databasenya, disini saya merubah seperti berikut :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravelmiddleware
DB_USERNAME=root
DB_PASSWORD=

Kemudian pada folder database, file user default bawaan laravel saya menambahkan kolom status, untuk cek usernya apakah aktif atau tidak.

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->string('status')->default('aktif'); // Menambahkan kolom status dengan default 'aktif
'
            $table->rememberToken();
            $table->timestamps();
        });

Kemudian jangan lupa tambahkan status tersebut kedalam models user.php

protected $fillable = [
        'name',
        'email',
        'password',
        'status', // Menambahkan kolom status ke dalam fillable
    ];

Setelah semua dilakukan kemudian jalankan php artisan migrate

Step 7. Membuat User untuk Pengujian Login

Karena middleware pada contoh di atas memeriksa data pengguna yang sedang login ($request->user()), Anda memerlukan akun pengguna terlebih dahulu untuk menguji apakah middleware berfungsi dengan benar.

Disini saya menggunakan tinker untuk membuat user laravel.

Jalankan perintah berikut melalui terminal:

php artisan tinker

Setelah masuk ke mode interactive shell, buat user baru dengan perintah:

User::create([
    'name' => 'Budi Santoso',
    'email' => 'budi@contoh.com',
    'password' => bcrypt('password123'),
    'status' => 'aktif',
]);

Pastikan kolom status sudah ditambahkan pada migrasi tabel users apabila Anda mengikuti contoh middleware CekStatusAkun di atas.

Step 8. Menguji Middleware dengan Feature Test

Selain diuji secara manual melalui login, middleware sebaiknya juga diuji secara otomatis agar perubahan kode di kemudian hari tidak merusak logika yang sudah berjalan. Laravel menyediakan feature test yang dapat mensimulasikan request lengkap, termasuk proses autentikasi.

Buat file test baru dengan perintah:

php artisan make:test CekStatusAkunTest

Isi file tests/Feature/CekStatusAkunTest.php dengan contoh berikut:

<?php

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class CekStatusAkunTest extends TestCase
{
    use RefreshDatabase;

    public function test_user_aktif_dapat_mengakses_dashboard(): void
    {
        $user = User::factory()->create(['status' => 'aktif']);

        $response = $this->actingAs($user)->get('/dashboard');

        $response->assertStatus(200);
    }

    public function test_user_nonaktif_ditolak_middleware(): void
    {
        $user = User::factory()->create(['status' => 'nonaktif']);

        $response = $this->actingAs($user)->get('/dashboard');

        $response->assertStatus(403);
    }
}

Jalankan pengujian dengan perintah:

php artisan test --filter=CekStatusAkunTest

Jika kedua skenario di atas berhasil (user aktif mendapat akses, user nonaktif ditolak), maka middleware custom yang dibuat sudah terverifikasi bekerja sesuai fungsinya. Pendekatan ini penting untuk memastikan keandalan aplikasi, terutama saat middleware digunakan pada fitur yang berkaitan langsung dengan keamanan dan hak akses pengguna.

Testing Middleware

FAQ

Berikut beberapa FAQ populer tentang apa itu middleware.

Apa perbedaan middleware global dan middleware route?

Middleware global akan dijalankan pada setiap request yang masuk ke aplikasi, sedangkan middleware route hanya dijalankan pada route tertentu yang secara eksplisit menggunakannya.


Apakah middleware bisa digunakan untuk API dan web sekaligus?

Bisa. Middleware dapat didaftarkan pada grup web maupun api sesuai kebutuhan, tergantung pada konfigurasi routing aplikasi.


Bagaimana cara menguji middleware custom?

Middleware dapat diuji menggunakan feature test laravel, misalnya dengan bantuan method actingAs() untuk mensimulasikan user yang sudah login, lalu mengirim request ke route yang dilindungi middleware dan memverifikasi status response yang dihasilkan.


Apakah perlu membuat user khusus untuk menguji middleware yang berkaitan dengan login?

Ya. Jika middleware memeriksa data pengguna yang sedang login, seperti role atau status akun, Anda perlu menyiapkan user uji coba terlebih dahulu, baik melalui Tinker, seeder, maupun factory pada saat menjalankan test otomatis.


Apakah middleware memengaruhi performa aplikasi?

Selama logika di dalamnya efisien, middleware tidak akan memberikan dampak performa yang signifikan. Namun, hindari operasi berat seperti query database kompleks di dalam middleware.


Kesimpulan

Kesimpulan

Membuat middleware custom di Laravel merupakan keterampilan penting bagi developer untuk membangun aplikasi yang lebih aman, terstruktur, dan mudah dikembangkan. Dengan memahami konsep, cara kerja, serta penerapannya, middleware dapat digunakan untuk mengatur alur request sesuai kebutuhan aplikasi.

Setelah aplikasi Laravel selesai dikembangkan, Anda juga membutuhkan layanan hosting yang mendukung kebutuhan aplikasi agar dapat diakses secara online. Layanan Hosting Murah dari Rumahweb dapat menjadi salah satu pilihan untuk website atau aplikasi Laravel dengan kebutuhan resource yang sesuai.

Semoga artikel ini membantu Anda memahami middleware dan mulai menerapkannya dalam pengembangan aplikasi Laravel.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Arief Hidayatullah

Arief Hidayatullah adalah seorang Technical Support di Rumahweb Indonesia yang memiliki minat dan keahlian dalam pengembangan web. Dengan pengalaman dan pengetahuannya di bidang teknologi, Arief memiliki ketertarikan khusus dalam pengembangan web menggunakan Laravel, sebuah framework PHP yang populer. Dengan semangat belajar dan eksplorasi teknologi, Arief terus mengembangkan keterampilannya untuk menciptakan solusi web yang efisien dan inovatif.