Tutorial Laravel #4: Routing Dasar di Laravel

1. Apa itu Routing?

Routing adalah proses menentukan apa yang terjadi ketika user mengakses URL tertentu. Di Laravel, semua route didefinisikan di folder routes/ - tidak ada lagi cek $_SERVER["REQUEST_URI"] seperti PHP native.

2. Route Dasar

Buka file routes/web.php:

use IlluminateSupportFacadesRoute;

// Route GET paling sederhana - mengembalikan string
Route::get('/', function () {
    return 'Halo, ini halaman utama!';
});

// Mengembalikan view
Route::get('/tentang', function () {
    return view('tentang');
});

// Mengembalikan JSON
Route::get('/api/info', function () {
    return response()->json(['app' => 'Laravel', 'versi' => '11']);
});

3. HTTP Methods

Laravel mendukung semua HTTP method:

Route::get('/artikel', function () { /* tampilkan daftar */ });
Route::post('/artikel', function () { /* simpan baru */ });
Route::put('/artikel/{id}', function ($id) { /* update penuh */ });
Route::patch('/artikel/{id}', function ($id) { /* update sebagian */ });
Route::delete('/artikel/{id}', function ($id) { /* hapus */ });

// Satu route untuk beberapa method sekaligus
Route::match(['get', 'post'], '/form', function () { /* ... */ });

// Semua method
Route::any('/semua', function () { /* ... */ });

4. Route Parameter

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

// Parameter opsional (pakai ?)
Route::get('/user/{name?}', function (string $name = 'Guest') {
    return "Halo, $name";
});

// Beberapa parameter sekaligus
Route::get('/post/{year}/{slug}', function (string $year, string $slug) {
    return "Artikel $slug tahun $year";
});

5. Route dengan Constraint

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

// Hanya menerima huruf
Route::get('/kategori/{nama}', function ($nama) {
    return "Kategori: $nama";
})->where('nama', '[a-zA-Z]+');

// Shorthand helper
Route::get('/user/{id}', function ($id) {})->whereNumber('id');
Route::get('/slug/{slug}', function ($slug) {})->whereAlphaNumeric('slug');

6. Named Route

Named route memudahkan kamu membuat URL tanpa hardcode string - sangat berguna di view dan controller:

// Beri nama pada route
Route::get('/artikel', [ArtikelController::class, 'index'])->name('artikel.index');
Route::get('/artikel/{id}', [ArtikelController::class, 'show'])->name('artikel.show');
Route::get('/artikel/buat', [ArtikelController::class, 'create'])->name('artikel.create');

// Gunakan di blade template
// <a href="{{ route('artikel.index') }}">Semua Artikel</a>
// <a href="{{ route('artikel.show', ['id' => 5]) }}">Detail</a>

// Gunakan di PHP
$url = route('artikel.index');
return redirect()->route('artikel.index');

7. Route Group

// Group dengan prefix URL
Route::prefix('admin')->group(function () {
    Route::get('/dashboard', function () { return 'Admin Dashboard'; });
    Route::get('/users', function () { return 'Daftar User'; });
    // URL: /admin/dashboard, /admin/users
});

// Group dengan middleware
Route::middleware(['auth'])->group(function () {
    Route::get('/profile', function () { return 'Profile'; });
    Route::get('/settings', function () { return 'Settings'; });
});

// Group dengan prefix DAN middleware
Route::prefix('admin')->middleware(['auth', 'is_admin'])->name('admin.')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('dashboard');
    // URL: /admin/dashboard, Named: admin.dashboard
});

8. Melihat Semua Route

# Lihat semua route yang terdaftar
php artisan route:list

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

# Filter berdasarkan path
php artisan route:list --path=admin

9. Ringkasan

  • Route didefinisikan di routes/web.php menggunakan facade Route
  • Mendukung semua HTTP method: GET, POST, PUT, PATCH, DELETE
  • Route parameter memungkinkan URL dinamis
  • Named route memudahkan generate URL di seluruh aplikasi
  • Route group untuk mengelompokkan route dengan prefix atau middleware yang sama

Tutorial berikutnya membahas controller di Laravel.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.