Controller & Resource Controller di Laravel 13
Halo bos! Selamat datang di artikel keempat Laravel.
Di artikel sebelumnya kita sudah belajar membuat route pakai closure (fungsi langsung di dalam routes/web.php). Cara itu cocok untuk belajar, tapi kalau aplikasi semakin besar, file route akan jadi sangat panjang dan berantakan.
Solusinya adalah Controller.
Controller adalah kelas khusus yang tugasnya menangani logika dari request. Dengan Controller, kode kita jadi lebih rapi, mudah dibaca, dan mudah dikelola.
Di artikel ini kita akan belajar dua hal penting:
- Cara memindahkan logic dari closure ke Controller biasa
- Mengenal Resource Controller + Route::resource yang sangat powerful
1. Kenapa Harus Pakai Controller?
Bayangkan kamu punya 20–30 halaman. Kalau semuanya ditulis pakai closure di web.php, file itu akan sangat panjang dan susah dibaca.
Dengan Controller:
- Setiap resource (Post, Category, User, dll) punya file sendiri
- Logic terpisah dari routing
- Lebih mudah di-test
- Lebih profesional
2. Membuat Controller Biasa
Mari kita buat Controller untuk menangani halaman post.
Jalankan perintah berikut di terminal (pastikan kamu berada di folder project):
Laravel akan membuat file baru di:
Isi default-nya kurang lebih seperti ini:
Sekarang mari kita isi beberapa method sederhana.
Buka file PostController.php dan ubah menjadi:
3. Menghubungkan Route ke Controller
Sekarang buka file routes/web.php.
Hapus atau comment route lama yang pakai closure, lalu ganti dengan cara yang benar:
Penjelasan penting:
- [PostController::class, 'index'] artinya: panggil method index di dalam class PostController
- Ini adalah cara modern yang direkomendasikan di Laravel (sejak Laravel 8 ke atas, termasuk Laravel 13)
Sekarang coba akses:
- http://blog-sederhana.test/posts
- http://blog-sederhana.test/posts/create
- http://blog-sederhana.test/posts/5
Kalau muncul teks dari Controller, berarti sudah berhasil!
4. Resource Controller (Yang Paling Sering Dipakai)
Kebanyakan aplikasi web butuh operasi CRUD (Create, Read, Update, Delete).
Laravel punya fitur yang sangat membantu untuk ini, namanya Resource Controller.
Buat Resource Controller dengan perintah:
Catatan: Kita pakai --force karena sebelumnya sudah ada file PostController.php. Kalau belum ada, cukup php artisan make:controller PostController --resource.
Setelah dijalankan, Laravel akan mengisi Controller dengan 7 method standar:
5. Route::resource — Satu Baris untuk 7 Route
Sekarang ganti semua route post di routes/web.php menjadi cukup satu baris:
Selesai.
Laravel secara otomatis akan membuat 7 route sekaligus:
Ini adalah standar RESTful yang dipakai di hampir semua aplikasi modern.
6. Melihat Hasilnya dengan route:list
Untuk memastikan semua route sudah terdaftar dengan benar, jalankan:
Atau versi lengkap:
Kamu akan melihat ketujuh route yang sudah otomatis dibuat.
7. Tips Tambahan (Sangat Berguna)
1. Hanya ambil sebagian method saja
Kalau kamu belum butuh semua method:
atau
2. Generate Controller sekaligus dengan Model (lebih advanced)
Nanti ketika kita sudah punya Model Post, kita bisa pakai:
Ini akan otomatis menambahkan type-hint model di method show, edit, update, dan destroy (siap untuk Route Model Binding).
3. API Resource (untuk API saja)
Kalau kamu bikin API (bukan website biasa), pakai:
dan
Ini hanya membuat 5 method (tanpa create dan edit).
Ringkasan
Yang perlu kamu ingat dari artikel ini:
- Controller membantu merapikan kode agar tidak semuanya di web.php
- Cara memanggil Controller: [PostController::class, 'namaMethod']
- Resource Controller + Route::resource adalah cara tercepat untuk membuat CRUD
- Satu baris Route::resource('posts', PostController::class) = 7 route sekaligus
- Selalu cek dengan php artisan route:list
Selanjutnya
Di Artikel 5 kita akan belajar:
Blade Templating Dasar — Layout, Include, dan Component
Kita akan mulai membuat tampilan yang rapi, memakai master layout, partial (navbar), dan component, supaya HTML tidak copy-paste terus.
Tutorial terkait
Query Builder vs Eloquent — Kapan Pakai yang Mana?
Laravel sebenarnya punya dua lapisan untuk mengakses database: Query Builder (DB::table()) yang lebih rendah level, dan Eloquent (Post::query()) yang dibangun di atasnya
Model & Eloquent ORM Dasar di Laravel 13
Tabel sudah ada di database, tapi kalau mau query data, kita butuh cara yang lebih ekspresif daripada SQL mentah. Di sinilah Eloquent, ORM (Object-Relational Mapping) bawaan Laravel, berperan
Migration Dasar — Membuat Tabel Posts dan Categories
Sampai episode ini kita belum punya tabel posts atau categories sama sekali — controller kita masih mengembalikan teks placeholder. Saatnya bikin struktur database sungguhan lewat migration