Belajar Laravel - Routing Dasar
Episode 4 of 24

Belajar Laravel - Routing Dasar

Menguasai routing Laravel: Route::get/post/put/delete, parameter {id} dengan constraint, named routes, route groups, fallback 404, hingga pemeliharaan route dengan php artisan route:list di Laravel 13.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 3 proyek Laravel 13 kalian berjalan, sekarang kita masuk ke gerbang utama aplikasi: routing. Route adalah peta yang menghubungkan URL yang diketik user ke kode yang menanganinya. Di episode 2 kita sudah melihat alur request; sekarang kita pelajari cara menulis definisi route yang benar — dari yang paling sederhana sampai yang siap produksi.

Routing yang rapi bukan soal estetika: ini menentukan kemudahan maintenance, kejelasan URL (SEO & UX), dan bagaimana middleware diterapkan di episode-episode berikutnya.

HTTP Methods Dasar

Laravel menyediakan method sesuai dengan verb HTTP:

routes/web.php
Route::get('/posts', [PostController::class, 'index']);
Route::post('/posts', [PostController::class, 'store']);
Route::put('/posts/{post}', [PostController::class, 'update']);
Route::delete('/posts/{post}', [PostController::class, 'destroy']);

Perhatikan pola RESTful: GET untuk membaca, POST untuk membuat, PUT/PATCH untuk mengupdate, DELETE untuk menghapus. Laravel juga punya Route::patch() untuk update parsial dan Route::any() untuk semua method — tapi any jarang dipakai karena melonggarkan kontrol.

Route dengan closure juga valid, meskipun untuk kode produksi selalu lebih baik memakai controller:

Route dengan closure
Route::get('/hello', function () {
    return 'Halo dari route!';
});

Parameter dan Constraint

Kita bisa menangkap bagian dari URL memakai {...}:

Route berparameter
Route::get('/posts/{post}/edit', function ($post) {
    return "Edit post id: {$post}";
});

Parameter ini dibatasi dengan regular expression agar route tidak menerima nilai tak terduga:

Constraint parameter
Route::get('/users/{user}', function ($user) {
    return "User id: {$user}";
})->where('user', '[0-9]+');

->where('user', '[0-9]+') memastikan hanya angka yang diterima — mengakses /users/abc akan menghasilkan 404, bukan error. Di Laravel modern, jika route berparameter dan dibuka dengan model di controller, ini biasanya diganti route model binding — kita lihat di episode 7.

Tip

Urutan route itu penting: Laravel mencocokkan dari atas ke bawah. Taruh route yang lebih spesifik di atas route yang lebih umum. Contohnya Route::get('/posts/create') harus ditulis sebelum Route::get('/posts/{post}') — kalau tidak, kata "create" akan ditangkap sebagai nilai {post}.

Named Routes

Memberi nama pada route membuat URL bisa dirujuk dari mana saja tanpa menulis string URL secara manual:

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

Penggunaan di kode dan Blade:

Memakai named route
$url = route('posts.show', ['post' => 42]);
Named route di Blade
<a href="{{ route('posts.show', $post) }}">Lihat Post</a>

Keuntungannya besar: jika URL berubah, kalian cukup mengubah satu tempat (definisi route) — seluruh tautan otomatis ikut. Nama route juga menjadi dasar untuk memeriksa halaman aktif di navigasi (request()->routeIs('posts.*')).

Route Groups

Route yang berbagi prefix atau middleware bisa dikelompokkan:

Route group dengan prefix dan name
Route::prefix('admin')->name('admin.')->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index'])
        ->name('dashboard');
 
    Route::get('/settings', [SettingsController::class, 'index'])
        ->name('settings');
});

Dengan kode di atas, URL yang dihasilkan /admin/dashboard dan /admin/settings, dengan nama admin.dashboard dan admin.settings. Group juga bisa menambahkan middleware — misalnya ->middleware('auth') untuk melindungi seluruh halaman admin — kita bahas di episode 10.

Melihat dan Menjaga Route

php artisan route:list adalah peta lengkap aplikasi kalian:

Daftar seluruh route
php artisan route:list

Output-nya menampilkan method, URI, nama, dan handler tiap route — sangat berguna untuk menemukan konflik atau sekadar memahami aplikasi orang lain. Saring dengan --path atau --name untuk pencarian cepat:

Cari route dengan pola
php artisan route:list --path=posts
php artisan route:list --name=admin

Fallback Route 404

Route fallback menangkap semua URL yang tidak cocok dengan route manapun — berguna untuk halaman "Not Found" custom:

Route fallback
Route::fallback(function () {
    return response('Halaman tidak ditemukan', 404);
});

Route::fallback() harus didefinisikan paling akhir di file route — posisinya hanya berfungsi sebagai jaring pengaman untuk request yang tidak terjawab.

Penutup

Inti yang harus dibawa pulang:

  • Gunakan method HTTP sesuai tujuan: get/post/put/delete; hindari any.
  • Parameter {id} bisa dibatasi dengan ->where() constraint; perhatikan urutan route.
  • Named routes (->name()) wajib dibiasakan — akses lewat route().
  • Route groups rapi untuk prefix & middleware bersama.
  • php artisan route:list dan Route::fallback() menjaga aplikasi tetap terpelihara.

Di episode 5 selanjutnya kita akan membahas controllers & request — membuat controller dengan php artisan make:controller, resource controllers, dependency injection, $request->validate(), Form Request classes, dan urutan middleware pada request lifecycle. Sampai jumpa di episode 5!

Belajar Laravel - Routing Dasar | Belajar Laravel