Kalau episode sebelumnya kamu sudah belajar membuat Blade template, kini saatnya step naik ke level arsitektur. Kamu akan belajar mengapa Controller sangat penting dan bagaimana dia jadi "jantung" dari setiap aplikasi Laravel yang well-structured.
Percaya atau tidak, memahami Controller dan konsep MVC adalah titik balik besar dalam perjalanan belajar Laravel kamu. Dari sini, segala sesuatu akan lebih masuk akal.
Apa Itu MVC?
MVC adalah singkatan dari Model-View-Controller — sebuah pola desain (design pattern) yang memisahkan aplikasi menjadi tiga bagian dengan tanggung jawab berbeda. Daripada menjelaskan dengan definisi teknis yang bikin pusing, mari pakai analogi restoran yang jauh lebih intuitif.
Bayangkan kamu sedang makan di restoran mewah:
- Model = Dapur dan bahan mentah. Model adalah logika bisnis dan data — dia tahu bagaimana cara olah data, ambil dari database, simpan ke database. Model adalah "sumber kebenaran" tentang data aplikasi kamu.
- View = Piring dan penyajian makanan. View adalah yang pengguna lihat — HTML, CSS, desain visual. Dia hanya buat tampilan; dia tidak perlu tahu bagaimana dapur bekerja. Dalam Laravel, ini adalah Blade template yang sudah kamu pelajari di episode #4.
- Controller = Pelayan (waiter). Controller adalah perantara. Dia terima "order" (request) dari tamu, bilang ke dapur apa yang diinginkan (interact dengan Model), lalu bawa piring ke tamu dengan presentasi yang benar (render View). Controller mengkoordinasi semuanya.
Dengan pemisahan ini, setiap bagian punya job yang jelas dan mudah dirawat. Jika kamu ingin ubah tampilan, tinggal edit View. Jika logic bisnis berubah, tinggal ubah Model. Controller tetap bisa pakai kedua-duanya tanpa perlu diubah banyak.
Mengapa Controller Perlu?
Selama ini, di episode #1-#3, kamu menulis route seperti ini di web.php:
Route::get('/posts', function () {
$posts = Post::all();
return view('posts.index', ['posts' => $posts]);
});Ini jalan fine untuk aplikasi sederhana. Tapi bayangkan route file-mu punya 50 route, 100 route, atau 200 route. Semua logic tercampur di satu tempat. Membaca route, debug error, atau collaboration dengan tim jadi nightmare.
Controller mengatasi ini dengan cara: "Hei, semua logic untuk halaman posts, tempat di PostsController. Route cuma buat routing, beres." Dengan gitu, kode lebih rapi, testable, dan scalable.
Peran Controller di Laravel
Controller adalah class PHP yang berisi method-method yang handle request. Tiap method biasanya handle satu aksi — contohnya, method index() untuk list posts, method show() untuk detail satu post, method create() untuk form tambah post.
Tanggung jawab Controller:
- Terima request dari route
- Proses data (pakai Model jika perlu query database)
- Return response — bisa view (HTML), JSON, redirect, atau response lain
Controller tidak perlu tahu detail SQL, tidak perlu tahu HTML. Dia cuma koordinir Model dan View.
Membuat Controller dengan Artisan
Laravel punya command line tool bernama Artisan yang bisa auto-generate Controller. Jauh lebih cepat daripada bikin file manually.
Untuk membuat Controller baru bernama PostsController, jalankan:
php artisan make:controller PostsControllerPerintah ini akan membuat file baru di app/Http/Controllers/PostsController.php dengan template dasar class. Isi filenya akan kelihatan seperti ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostsController extends Controller
{
//
}Sekarang kamu punya class kosong yang siap diisi dengan method-method untuk handle request posts.
Resource Controller vs Basic Controller
Ada dua tipe Controller di Laravel: Basic dan Resource.
Basic Controller adalah yang baru saja kita buat — kamu define method sesuai kebutuhan. Cocok untuk custom logic atau aplikasi dengan endpoint tidak standard.
Resource Controller adalah auto-generate method sesuai standar REST (index, create, store, show, edit, update, destroy). Ini cocok untuk CRUD operation yang standard.
Untuk membuat Resource Controller, tambahkan flag --resource:
php artisan make:controller PostsController --resourceIni akan auto-generate 7 method: index(), create(), store(), show(), edit(), update(), destroy(). Cocok untuk operasi standar — list, tambah, edit, hapus.
Menghubungkan Route ke Controller
Sekarang kita connect route ke Controller. Buka routes/web.php dan ubah route yang tadi jadi:
use App\Http\Controllers\PostsController;
Route::get('/posts', [PostsController::class, 'index']);Artinya: "Ketika ada request GET ke /posts, panggil method index() dari class PostsController."
Lalu di PostsController.php, implementasi method index():
<?php
namespace App\Http\Controllers;
use App\Models\Post;
class PostsController extends Controller
{
public function index()
{
$posts = Post::all();
return view('posts.index', ['posts' => $posts]);
}
}Bandingkan dengan route lama — logika sama, tapi kali ini logic ada di Controller, bukan di route. Route file kamu jadi clean dan mudah dibaca.
Latihan: Refactor Route Lama ke Controller
Kalau kamu sudah punya beberapa route di web.php dari episode sebelumnya, sekarang saatnya refactor ke Controller.
Step 1: Generate Controller baru (atau buka yang sudah ada).
Step 2: Pindahkan logic dari route closure ke method di Controller. Contoh:
Sebelum (di route):
Route::get('/about', function () {
return view('about');
});Sesudah (di Controller):
public function about()
{
return view('about');
}Step 3: Update route untuk pakai Controller:
Route::get('/about', [PostsController::class, 'about']);Proses ini akan membiasakan kamu dengan struktur MVC. Kamu akan mulai otomatis berpikir: "Logic ini mesti ada di Controller, bukan di route."
Kesimpulan
Dengan paham Controller dan konsep MVC, kamu sudah naik level signifikan dalam understanding Laravel. Bukan lagi cuma nulis route dan view asal jalan, tapi paham mengapa struktur itu penting untuk project yang scalable dan maintainable.
Ingat analogi restoran: View itu piring, Model itu dapur, Controller itu pelayan. Dengan pemisahan tanggung jawab yang jelas, kolaborasi tim jadi lancar, bug lebih mudah dicari, dan refactor kode jadi less painful. Ini fondasi yang akan kamu pakai di setiap project Laravel kamu ke depannya.
Pelajari lebih lanjut tentang Controller di dokumentasi resmi Laravel dan tentang pola MVC secara general di Wikipedia. Sekarang kamu siap untuk episode #6 where kita akan belajar tentang Database & Migration — dimana kita akan ngoding Model dengan proper dan interact ke database yang real.