Pernahkah kamu bertanya-tanya bagaimana Laravel bisa memfilter, mengamankan, atau bahkan memodifikasi request sebelum sampai ke Controller? Jawabannya ada pada konsep middleware. Middleware di Laravel ibarat “penjaga gerbang” yang memastikan setiap request yang masuk sudah sesuai aturan sebelum diproses lebih lanjut.
Bayangkan kamu membangun aplikasi dengan fitur login, role-based access, atau rate limiting. Semua itu bisa di-handle dengan elegan menggunakan middleware. Dengan pendekatan ini, kode menjadi lebih modular, reusable, dan mudah di-maintain.
Menyiapkan Lingkungan Pengembangan
Sebelum praktik, pastikan environment Laravel sudah siap:
- PHP >= 8.1
- Composer
- Laravel 10.x
- Code editor (VSCode, PHPStorm, dll)
Instalasi project baru (opsional):
composer create-project laravel/laravel laravel-middleware-demo
Struktur folder utama yang relevan:
laravel-middleware-demo/
├── app/
│ └── Http/
│ └── Middleware/
├── routes/
│ └── web.php
Konsep Dasar Middleware
Middleware adalah class yang memproses HTTP request sebelum atau sesudah mencapai Controller. Fungsinya bisa bermacam-macam: autentikasi, logging, CORS, validasi, hingga manipulasi response.
Keuntungan menggunakan middleware:
- Memisahkan concern (autentikasi, logging, dsb) dari logic utama
- Mudah di-reuse di banyak route
- Mendukung chaining dan priority
- Bisa custom sesuai kebutuhan aplikasi
Membuat Middleware Kustom
Laravel menyediakan artisan command untuk membuat middleware:
php artisan make:middleware CheckUserRole
File baru akan muncul di app/Http/Middleware/CheckUserRole.php
.
Contoh implementasi sederhana:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckUserRole
{
public function handle(Request $request, Closure $next, $role)
{
// Cek apakah user punya role yang sesuai
if (!$request->user() || $request->user()->role !== $role) {
// Redirect atau abort jika tidak sesuai
return redirect('/login');
}
return $next($request);
}
}
Mendaftarkan dan Menggunakan Middleware
Agar middleware bisa digunakan, daftarkan di app/Http/Kernel.php
:
protected $routeMiddleware = [
// ...existing code...
'check.role' => \App\Http\Middleware\CheckUserRole::class,
];
Gunakan di route:
Route::get('/admin', function () {
return 'Admin Page';
})->middleware('check.role:admin');
Middleware Bawaan Laravel
Laravel sudah menyediakan banyak middleware siap pakai, seperti:
auth
(autentikasi user)guest
(hanya untuk guest)verified
(email verification)throttle
(rate limiting)cors
(CORS handling)
Contoh penggunaan rate limiting:
Route::middleware(['throttle:10,1'])->group(function () {
Route::get('/api/data', function () {
return ['data' => 'Contoh data'];
});
});
Best Practices Middleware
- Single Responsibility: Satu middleware hanya untuk satu concern
- Gunakan route group untuk chaining
- Manfaatkan parameter middleware untuk fleksibilitas
- Error handling: Return response yang jelas jika request tidak lolos
- Testing: Uji middleware secara unit test
Debugging dan Troubleshooting
Tips debugging middleware:
- Gunakan
dd()
ataudump()
di dalam methodhandle()
- Cek urutan middleware di
Kernel.php
- Perhatikan return value: harus response atau
$next($request)
- Cek log di
storage/logs/laravel.log
Advanced Topics
- Global vs Route Middleware: Global aktif di semua request, route hanya di route tertentu
- Terminable Middleware: Bisa eksekusi logic setelah response dikirim (method
terminate()
) - Middleware Priority: Atur urutan eksekusi di
Kernel.php
- Custom Response: Return JSON, redirect, atau custom response sesuai kebutuhan
Contoh terminable middleware:
public function terminate($request, $response)
{
// Logging atau cleanup setelah response
}
Sumber Belajar dan Referensi
Middleware adalah salah satu fitur powerful di Laravel yang membuat aplikasi lebih aman, scalable, dan maintainable. Dengan memahami konsep, implementasi, dan best practices di atas, kamu bisa membangun aplikasi yang lebih robust dan mudah dikembangkan. Yuk, eksplorasi middleware di project Laravel-mu!