Routing di Laravel: Panduan Lengkap dengan Contoh Kode

laravel

Routing adalah pintu masuk semua request di Laravel. Sebelum request sampai ke controller atau logika apapun, dia harus melewati router dulu. Memahami cara kerja routing akan membuat kamu lebih mudah membangun struktur aplikasi yang rapi dan mudah di-maintain.

Konsep Dasar: Bagaimana Request Diproses

Saat browser mengirim request ke GET /posts, Laravel membaca file routes/web.php, mencari route yang cocok, lalu meneruskan ke handler yang ditentukan. Urutan ini tidak bisa dibalik.

Bentuk route paling sederhana:

// routes/web.php
Route::get('/posts', function () {
    return 'Daftar semua post';
});

// Atau langsung ke controller
Route::get('/posts', [PostController::class, 'index']);

HTTP Method yang Tersedia

Route::get('/posts', [PostController::class, 'index']);
Route::post('/posts', [PostController::class, 'store']);
Route::put('/posts/{id}', [PostController::class, 'update']);
Route::patch('/posts/{id}', [PostController::class, 'update']);
Route::delete('/posts/{id}', [PostController::class, 'destroy']);

Kalau mau handle lebih dari satu method sekaligus:

Route::match(['get', 'post'], '/form', [FormController::class, 'handle']);
Route::any('/webhook', [WebhookController::class, 'receive']);

Route Parameter

Parameter wajib — request harus menyertakan nilai ini:

Route::get('/users/{id}', function (string $id) {
    return "User ID: $id";
});

// Bisa langsung inject model (Route Model Binding)
Route::get('/users/{user}', function (User $user) {
    return $user; // otomatis cari User::find($id)
});

Parameter opsional — tambahkan ? dan nilai default:

Route::get('/posts/{slug?}', function (string $slug = 'semua') {
    return "Slug: $slug";
});

Tambahkan constraint untuk validasi parameter:

Route::get('/users/{id}', [UserController::class, 'show'])
    ->where('id', '[0-9]+');  // hanya menerima angka

Route::get('/posts/{slug}', [PostController::class, 'show'])
    ->where('slug', '[a-z0-9-]+');

Named Route

Named route memudahkan generate URL di dalam kode, tidak perlu hardcode string URL:

Route::get('/posts/{id}', [PostController::class, 'show'])
    ->name('posts.show');

// Generate URL dari nama
$url = route('posts.show', ['id' => 5]);
// Hasil: http://app.test/posts/5

// Redirect ke named route
return redirect()->route('posts.show', ['id' => 5]);

Route Group

Grup route berguna untuk menerapkan prefix, middleware, atau namespace secara serentak:

// Grup dengan prefix URL
Route::prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::get('/users', [AdminController::class, 'users']);
    // Accessible di: /admin/dashboard, /admin/users
});

// Grup dengan middleware
Route::middleware(['auth'])->group(function () {
    Route::get('/profile', [ProfileController::class, 'show']);
    Route::get('/settings', [SettingController::class, 'index']);
});

// Kombinasi keduanya
Route::middleware(['auth'])->prefix('dashboard')->group(function () {
    Route::get('/overview', [DashboardController::class, 'overview']);
});

Resource Route

Satu baris untuk membuat 7 route CRUD sekaligus:

Route::resource('posts', PostController::class);

Ini setara dengan:

GET     /posts              → index
GET     /posts/create       → create
POST    /posts              → store
GET     /posts/{post}       → show
GET     /posts/{post}/edit  → edit
PUT     /posts/{post}       → update
DELETE  /posts/{post}       → destroy

Kalau tidak butuh semua route:

// Hanya route tertentu
Route::resource('posts', PostController::class)
    ->only(['index', 'show']);

// Kecualikan route tertentu
Route::resource('posts', PostController::class)
    ->except(['create', 'edit']);

Melihat Semua Route yang Terdaftar

php artisan route:list

# Filter berdasarkan nama
php artisan route:list --name=posts

# Filter berdasarkan method
php artisan route:list --method=GET

Route Caching untuk Production

Di production, cache route agar lebih cepat:

php artisan route:cache

# Hapus cache (jalankan setelah ubah routes/)
php artisan route:clear

Baca juga: Membuat Controller di Laravel 12 dan Invokable Controller di Laravel.

Kalau kamu butuh tim untuk membangun aplikasi Laravel dari arsitektur awal sampai deployment, lihat layanan pengembangan aplikasi kami.

Comments

Leave a Reply

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