Pernah nonton film action? Ada sutradara yang mengatur semua adegan — siapa yang ngomong apa, kapan pintu dibuka, dan kapan ledakan terjadi. Penonton tidak melihat sang sutradara, tapi tanpa dia semua berantakan. Nah, Controller di Laravel persis seperti sutradara itu.
Di artikel sebelumnya (Artikel 6), kamu sudah belajar bagaimana routing Laravel mengarahkan URL ke tujuan yang tepat. Tapi selama ini kita menaruh logika langsung di dalam fungsi anonim — dan itu bukan cara yang baik untuk project nyata. Controller hadir untuk memisahkan logika aplikasi dari definisi route, membuat kode lebih rapi, testable, dan mudah dikembangkan. Artikel ke-7 dari 50 Artikel Belajar Laravel ini akan memandu kamu step by step!
"Controller adalah kelas PHP yang bertugas menerima request dari route, memproses logika bisnis, lalu mengembalikan response ke pengguna — bisa berupa view, JSON, atau redirect."
Controller adalah bagian C dari pola arsitektur MVC (Model–View–Controller) yang menjadi fondasi Laravel. Ia menjadi jembatan antara Route (jalur masuk) dan View/Model (output dan data).
🏗️ Memahami Controller dalam Routing Laravel: Konsep MVC
Bayangkan sebuah restoran. Ada tiga bagian penting: menu (View) yang dilihat pelanggan, dapur (Model) yang menyimpan dan mengolah bahan makanan, dan pelayan (Controller) yang menjadi penghubung — menerima pesanan, menyampaikannya ke dapur, lalu membawakan hasilnya ke meja pelanggan.
Dalam konteks routing Laravel, ketika pengguna mengakses URL /produk, route meneruskan request tersebut ke Controller. Controller kemudian memutuskan: perlu ambil data dari database? Perlu validasi? Perlu redirect? Semua logika itu ada di sini.
Pola MVC (Model-View-Controller) pertama kali diperkenalkan oleh Trygve Reenskaug pada tahun 1979 saat bekerja di Xerox PARC — jauh sebelum web ada! Sekarang, hampir semua framework web modern mengadopsi pola ini, termasuk Laravel, Django, Ruby on Rails, dan Spring Boot.
| Aspek | Route Closure | Route + Controller ✅ |
|---|---|---|
| Organisasi kode | Semua di web.php — cepat berantakan | ✅ Terpisah, rapi, mudah dicari |
| Route caching | ❌ Tidak bisa di-cache | ✅ Bisa di-cache (lebih cepat) |
| Unit Testing | ❌ Sulit diuji secara terpisah | ✅ Mudah ditulis unit test-nya |
| Cocok untuk | Prototyping / route sangat sederhana | ✅ Semua skala project |
| Reusability | ❌ Logika tidak bisa dipakai ulang | ✅ Method controller bisa dipanggil di mana saja |
⚙️ Cara Membuat Controller Laravel: Panduan Langkah demi Langkah
Cukup teorinya! Sekarang kita buat Controller pertamamu. Laravel menyediakan perintah Artisan yang membuat proses ini jadi super cepat — kamu tidak perlu membuat file PHP secara manual.
Generate Controller dengan Artisan
Jalankan perintah ini di terminal project Laravel kamu. Laravel akan membuat file controller secara otomatis di folder app/Http/Controllers/.
Struktur File Controller yang Dihasilkan
Buka file app/Http/Controllers/ProdukController.php. Ini adalah struktur dasarnya:
Hubungkan Route ke Controller
Setelah Controller dibuat, sambungkan ia ke routing Laravel di file routes/web.php. Ada dua cara:
Gunakan flag --resource saat membuat Controller supaya Laravel langsung menyiapkan ke-7 method standar CRUD: index, create, store, show, edit, update, destroy. Kamu tinggal isi logika di dalamnya — hemat waktu puluhan menit!
🔬 Fitur Lanjutan Controller yang Sering Dipakai di Routing Laravel
Setelah bisa membuat Controller dasar, ada beberapa fitur yang akan kamu pakai sehari-hari dalam mengembangkan aplikasi Laravel. Berikut fitur-fitur esensial yang wajib kamu kuasai:
Menerima Data dari Request
Controller menerima data dari form, URL parameter, atau query string melalui objek Request yang diinjeksikan otomatis oleh Laravel.
Mengembalikan Response: View, JSON, atau Redirect
Controller bisa mengembalikan tiga jenis response utama sesuai kebutuhan aplikasimu.
Pola Post/Redirect/Get (PRG) adalah standar industri setelah form submit. Jangan langsung return view setelah menyimpan data — selalu redirect dulu! Ini mencegah pengguna tidak sengaja mengirim form dua kali hanya karena refresh halaman. Method with('success', '...') menyimpan pesan ke session yang bisa ditampilkan di halaman berikutnya.
🎯 Single Action Controller: Satu Controller Satu Tugas
Tidak semua halaman butuh 7 method. Kadang ada halaman yang hanya punya satu fungsi — misalnya halaman dashboard, atau proses logout. Untuk kasus ini, Laravel menyediakan Single Action Controller (juga disebut Invokable Controller).
📊 7 Method Resource Controller: Referensi Lengkap
Ini adalah paduan antara routing Laravel dan method controller yang dihasilkan oleh Route::resource():
| Method | URL | Action | Fungsi |
|---|---|---|---|
| GET | /produk | index | Tampilkan semua data |
| GET | /produk/create | create | Tampilkan form tambah |
| POST | /produk | store | Simpan data baru |
| GET | /produk/{id} | show | Tampilkan 1 data |
| GET | /produk/{id}/edit | edit | Tampilkan form edit |
| PUT | /produk/{id} | update | Update data yang ada |
| DELETE | /produk/{id} | destroy | Hapus data |
Jangan taruh terlalu banyak logika di dalam Controller! Ini perangkap umum pemula Laravel. Controller seharusnya hanya bertugas menerima request dan mengembalikan response. Logika bisnis yang kompleks sebaiknya dipindahkan ke Service Class atau langsung ke Model. Controller yang gemuk (fat controller) adalah tanda bahwa arsitekturmu perlu diperbaiki.
Laravel menggunakan konvensi penamaan yang konsisten: nama Controller selalu dalam bentuk PascalCase dan diakhiri dengan kata "Controller" — contoh: UserController, OrderController, ProdukController. Ikuti konvensi ini agar kode kamu mudah dibaca oleh developer lain (dan dirimu sendiri 6 bulan kemudian 😄).
No comments:
Post a Comment