Kembali ke Artikel
9 November 2025
vandyahmad24
Diperbarui: 18 April 2026

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.

Tag: #laravel #php #tutorial
BACA JUGA

Artikel Lainnya di Kategori Laravel

laravel Laravel

9 November 2025

Invokable Controller di Laravel: Cara Kerja, Contoh Kode, dan Kapan Memakainya

Ada satu fitur Laravel yang sering dilewatkan developer pemula: invokable controller. Padahal kalau dipakai di tempat yang tepat, kode jadi lebih bersih dan lebih mudah dibaca. Artikel ini menjelaskan apa itu invokable controller, kapan sebaiknya dipakai, dan bagaimana cara implementasinya di Laravel 12. Apa Itu Invokable Controller? Invokable controller adalah controller yang hanya punya satu […]

Baca Artikel
Laravel

9 November 2025

Cara Instalasi Laravel Volt di Laravel 12: Via Breeze dan Livewire Langsung

Laravel Volt sudah termasuk dalam Livewire v3, jadi cara installnya lebih mudah dari yang Anda bayangkan. Artikel ini membahas dua jalur instalasi: lewat Laravel Breeze, dan langsung lewat Livewire. Prasyarat PHP 8.1 atau lebih baru Laravel 10 ke atas (disarankan Laravel 12) Composer Jalur 1: Install via Laravel Breeze Ini jalur paling umum. Breeze menyediakan […]

Baca Artikel
Laravel

9 November 2025

Keunggulan Laravel Volt: Mengapa Single-File Component Lebih Efisien

Setelah cukup banyak pakai Livewire biasa, saya coba beralih ke Volt di salah satu proyek internal. Hasilnya memang ada perbedaan yang terasa, terutama saat nambah fitur baru atau onboarding developer junior ke proyek. Artikel ini membahas keunggulan nyata Laravel Volt dibanding cara penulisan Livewire sebelumnya, lengkap dengan contoh kode perbandingan. 1. Single-File Component: Logika dan […]

Baca Artikel

Ingin Membaca Artikel Lainnya?

Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.

Lihat Semua Artikel