Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Laravel Diterbitkan: • Diperbarui: • 6 menit baca • 6 views

Routing & Controller Laravel: Panduan Lengkap MVC & CRUD

Juan Mths
Juan Mths
Chief Technology Officer & Administrator • Skor SEO: 100/100
Ilustrasi Routing & Controller Laravel: Panduan Lengkap MVC & CRUD
Laravel Featured Article Routing & Controller Laravel: Panduan Lengkap MVC & CRUD
Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Routing dan Controller di Laravel adalah dua komponen fondasi yang mengatur siklus penanganan permintaan web: berkas rute menangkap alamat URL beserta kata kerjanya (HTTP Verbs), lalu mendelegasikannya ke metode Controller untuk memproses data model dan merender tampilan antarmuka Blade. Kolaborasi terstruktur ini memastikan basis kode aplikasi web tetap modular, mudah dirawat, terlindungi dari celah keamanan parameter, serta optimal terhadap performa peramban.

Saat merancang aplikasi berbasis web berskala komersial, menempatkan seluruh logika pemrosesan langsung di dalam penutup rute (closure) merupakan praktik buruk yang cepat memicu kekacauan kode. Memisahkan deklarasi endpoint dari logika eksekusi Controller adalah syarat mutlak dalam standar rekayasa perangkat lunak MVC modern.

Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Dengan menerapkan penamaan rute yang aman dari refaktor kode, validasi parameter berbasis ekspresi reguler, serta pemanfaatan pengontrol sumber daya (Resource Controller), proses pembangunan aplikasi CRUD menjadi jauh lebih cepat, konsisten, dan siap produksi.

1. Manajemen Routing pada 'routes/web.php'

Semua rute berbasis antarmuka web yang memerlukan status sesi (session state), enkripsi cookie, dan perlindungan verifikasi token CSRF dikelola secara terpusat di dalam berkas routes/web.php. Sintaks deklarasi rute dasar memanfaatkan *facade* Route:

Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

use Illuminate\Support\Facades\Route;

// Rute sederhana mengembalikan respons teks langsung
Route::get('/tentang-kami', function () {
    return 'Halaman profil resmi perusahaan';
});

Menuliskan logika penanganan langsung pada closure rute seperti di atas hanya dianjurkan untuk eksperimen kilat atau pengujian rute sederhana. Pada aplikasi tingkat produksi, rute bertindak murni sebagai pengarah lalu lintas yang wajib mendelegasikan pemrosesan ke berkas Controller khusus.

Ilustrasi Routing & Controller Laravel: Panduan Lengkap MVC & CRUD

Tips Praktis dari Pengalaman Saya: Jangan pernah mendaftarkan rute yang memuat logika closure jika Anda berniat menjalankan optimasi php artisan route:cache di server hosting produksi. Di Laravel, rute berbasis closure tidak dapat diserialisasi ke dalam memori cache rute. Mengalihkan seluruh rute ke Controller khusus memungkinkan Anda mengaktifkan caching rute yang mampu memangkas waktu muat hingga puluhan milidetik.

2. Meneruskan Parameter Dinamis pada URL

Aplikasi web modern membutuhkan kemampuan menangkap segmen URL dinamis, seperti mengidentifikasi profil pengguna melalui parameter numerik ID atau memuat artikel berdasarkan format teks slug:

// Menangkap parameter wajib {id} pada URL
Route::get('/artikel/{id}', function (string $id) {
    return 'Menampilkan data artikel dengan ID: ' . $id;
});

// Parameter opsional menggunakan tanda tanya (?) beserta nilai bawaan (default)
Route::get('/profil/{nama?}', function (string $nama = 'Tamu') {
    return 'Halo, selamat datang ' . $nama;
});

// Validasi segmen URL menggunakan batasan Regular Expression (Regex)
Route::get('/produk/{id}', function (string $id) {
    return 'Produk ID: ' . $id;
})->whereNumber('id');

3. Membuat dan Mengatur Controller via Artisan

Untuk mengelola alur logika secara terisolasi, gunakan antarmuka baris perintah Artisan CLI untuk menghasilkan kerangka berkas Controller baru secara otomatis:

php artisan make:controller ArtikelController

Berkas baru akan dibuat di dalam direktori app/Http/Controllers/ArtikelController.php. Anda dapat menyusun metode untuk mengambil data spesifik dan menyalurkannya ke tampilan Blade:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\View\View;

class ArtikelController extends Controller
{
    public function show(string $id): View
    {
        // Simulasi data judul artikel
        $judulArtikel = 'Panduan Eksplorasi Routing Laravel';

        // Mengirimkan data menuju resources/views/artikel/detail.blade.php
        return view('artikel.detail', [
            'id'    => $id,
            'judul' => $judulArtikel
        ]);
    }
}

4. Menghubungkan Rute ke Controller dan Penamaan Rute (Named Routes)

Hubungkan deklarasi rute dengan metode Controller menggunakan sintaks pemanggilan array yang aman terhadap refaktor kode kelas di IDE Anda:

use App\Http\Controllers\ArtikelController;

// Menghubungkan URL ke method Controller sekaligus menetapkan identitas rute
Route::get('/artikel/{id}', [ArtikelController::class, 'show'])->name('artikel.detail');

Mengapa Harus Menggunakan Named Routes?

Dengan menambahkan deklarasi ->name('artikel.detail'), Anda dapat memanggil URL di dalam file Blade menggunakan helper route('artikel.detail', ['id' => 10]). Jika suatu saat struktur URL diubah dari /artikel/{id} menjadi /baca/{id}, seluruh tautan di situs Anda akan menyesuaikan secara otomatis tanpa perlu mengubah tautan di puluhan file Blade secara manual.

Tabel Pemetaan Aksi Endpoint pada Resource Controller

Pola Resource Controller menyederhanakan perutean CRUD dengan memetakan 7 aksi standar HTTP secara otomatis melalui satu baris kode rute. Tabel berikut merangkum pasangan metode HTTP, URI rute, nama aksi Controller, dan fungsinya:

Metode HTTP

Pola URI Rute

Metode Controller

Nama Rute Terdaftar

Fungsi Operasi

GET

/produk

index

produk.index

Menampilkan daftar semua data produk.

GET

/produk/create

create

produk.create

Menampilkan halaman formulir tambah data baru.

POST

/produk

store

produk.store

Menyimpan rekaman data baru ke basis data.

GET

/produk/{produk}

show

produk.show

Menampilkan rincian data spesifik berdasarkan ID.

GET

/produk/{produk}/edit

edit

produk.edit

Menampilkan form HTML untuk menyunting data.

PUT/PATCH

/produk/{produk}

update

produk.update

Memperbarui baris data tertentu di database.

DELETE

/produk/{produk}

destroy

produk.destroy

Menghapus rekaman data spesifik dari sistem.

5. Alternatif Cepat: Resource Controller untuk Operasi CRUD

Jika Anda membangun modul dengan siklus data lengkap (Create, Read, Update, Delete), buat Controller dengan opsi --resource untuk menyiapkan ketujuh metode tersebut secara otomatis:

php artisan make:controller ProdukController --resource

Setelah itu, daftarkan seluruh alur endpoint tersebut hanya melalui satu baris rute tunggal di routes/web.php:

Route::resource('produk', ProdukController::class);
Perbandingan efisiensi penulisan Resource Controller vs Route manual di Laravel

Kesalahan Umum yang Sering Terjadi (Troubleshooting): Saat mengirimkan formulir HTML untuk metode PUT, PATCH, atau DELETE ke Resource Controller, peramban web standar hanya mendukung atribut formulir GET dan POST. Mengirim form tanpa metode spoofing akan memicu kesalahan 405 Method Not Allowed. Selalu sisipkan direktif Blade @method('PUT') atau @method('DELETE') bersamaan dengan @csrf di dalam tag <form action="..." method="POST"> Anda agar Laravel dapat mengenali aksi HTTP yang ditargetkan.

FAQ: Pertanyaan yang Sering Diajukan Seputar Routing dan Controller Laravel

1. Kapan saya harus menggunakan Route Model Binding di Controller?

Gunakan Route Model Binding saat Anda ingin mengikat segmen URL langsung ke instansi model database (misalnya mengetik show(Produk $produk) alih-alih show($id)). Fitur ini otomatis mengeksekusi kueri pencarian berdasarkan kunci primer dan langsung melempar respons 404 Not Found jika data tidak ditemukan.

2. Apa perbedaan antara routes/web.php dan routes/api.php?

Rute di web.php dilengkapi middleware grup web yang menyediakan status sesi, cookie terenkripsi, dan proteksi CSRF untuk antarmuka pengguna. Sebaliknya, rute di api.php bersifat stateless (tanpa sesi) dan dilengkapi pembatasan laju permintaan (rate-limiting) untuk konsumsi aplikasi mobile atau Single Page Application (SPA).

3. Bagaimana cara mengelompokkan beberapa rute yang memiliki URL awalan sama?

Anda dapat memanfaatkan fungsi Route::prefix('admin')->group(...) untuk mengelompokkan URL dengan awalan yang sama, serta menambahkan Route::middleware(['auth'])->group(...) untuk membatasi akses banyak rute sekaligus di bawah satu lapis middleware otentikasi.

4. Apa fungsi dari perintah php artisan route:list?

Perintah CLI php artisan route:list berfungsi untuk memeriksa seluruh daftar rute yang terdaftar di aplikasi Anda, lengkap dengan metode HTTP yang diterima, pola URI, nama rute, tindakan Controller yang menangani, serta middleware aktif yang melindunginya.

Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Diskusi & Komentar

0

Sampaikan pertanyaan teknis, masukan, atau feedback Anda seputar artikel ini.

Tulis Komentar
* Tautan dalam komentar otomatis diamankan dengan atribut rel="nofollow ugc". Maks 2.000 karakter
Moderasi aktif: komentar akan ditinjau sebelum terbit.

Belum Ada Komentar

Jadilah pembaca pertama yang memulai diskusi menarik atau bertanya seputar materi artikel ini!