Routing Dasar
Mendefinisikan route, parameter, nama route, route view/redirect/fallback, dan batasan parameter.
Route: pintu masuk aplikasi
Route menghubungkan URL + metode HTTP dengan kode yang menanganinya. Semua route web didefinisikan di routes/web.php.
<?php
use Illuminate\Support\Facades\Route;
Route::get('/halo', function () {
return 'Halo, Laravel 13!';
});
Mengunjungi /halo menampilkan teks itu. Kamu bisa mengembalikan string, array (otomatis JSON), objek model, response, atau view.
Metode HTTP
Route::get($uri, $handler); // membaca
Route::post($uri, $handler); // membuat
Route::put($uri, $handler); // mengganti
Route::patch($uri, $handler); // mengubah sebagian
Route::delete($uri, $handler); // menghapus
Route::match(['get', 'post'], '/kontak', $handler);
Route::any('/webhook', $handler);
Form HTML hanya mengenal GET dan POST. Untuk PUT/PATCH/DELETE, Blade memakai @method('PUT') yang menambah field tersembunyi _method.
Parameter route
Route::get('/salam/{nama}', function (string $nama) {
return "Halo, {$nama}!";
});
Route::get('/komentar/{id?}', function (?int $id = null) { /* opsional */ });
Nilai di {...} otomatis disuntikkan ke parameter fungsi (berdasarkan urutan, nama variabel tidak harus sama dengan nama parameter di URL). Parameter diakhiri ? bersifat opsional dan wajib punya nilai bawaan.
Membatasi parameter
Route::get('/artikel/{id}', fn (int $id) => "Artikel #{$id}")->whereNumber('id');
Route::get('/kategori/{slug}', $handler)->whereAlpha('slug');
Route::get('/kode/{kode}', $handler)->where('kode', '[A-Z]{3}[0-9]+');
Jika URL tidak cocok dengan batasan, route dilewati dan Laravel mencoba route berikutnya (akhirnya 404).
Route bernama
Route::get('/salam/{nama}', fn (string $nama) => "Halo, {$nama}!")->name('salam');
route('salam', ['nama' => 'Dina']); // "http://localhost/salam/Dina"
return redirect()->route('salam', ['nama' => 'Dina']);
Selalu pakai nama route untuk membuat URL: kalau path berubah, cukup ubah di satu tempat.
Pintasan
Route::view('/tentang', 'tentang'); // langsung menampilkan view
Route::view('/bantuan', 'bantuan', ['versi' => '1.0']); // dengan data
Route::redirect('/beranda', '/', 301); // pengalihan permanen
Route::fallback(function () { // route "jatuh" bila tak ada yang cocok
return response('Halaman tidak ditemukan', 404);
});
Melihat semua route
php artisan route:list
php artisan route:list --path=salam
Urutan dan konflik
Laravel mencocokkan dari atas ke bawah. Letakkan route spesifik (/artikel/baru) sebelum yang berparameter (/artikel/{id}).
Cache route (produksi)
php artisan route:cache mempercepat pemuatan route di produksi. Catatan: route berbasis closure bisa di-cache pada versi modern, tetapi controller lebih rapi untuk aplikasi nyata (bab berikutnya).