Di Part 1, kamu sudah bisa membuat route dan view. Semua logika ditulis langsung di routes/web.php. Untuk project kecil itu tidak masalah, tapi begitu project membesar, file route akan penuh sesak dengan logika bisnis yang seharusnya tidak ada di sana.
Controller adalah solusinya. Controller adalah file PHP khusus tempat kamu menaruh logika — mengambil data, memproses request, lalu memutuskan view apa yang ditampilkan. Route cukup menunjuk ke controller.
Analogi: Restoran
Bayangkan restoran:
- Route = pelanggan datang dan pesan menu
- Controller = pelayan yang menerima pesanan, meneruskan ke dapur, lalu membawa hidangan ke meja
- View = tampilan hidangan yang disajikan
- Model = dapur yang mengolah data
Tanpa controller, pelayan (route) harus masak sendiri di tempat — kacau. Dengan controller, tanggung jawab jelas terpisah.
📋 Progress Belajarmu
① Buat Controller
Buka terminal di VS Code (pastikan kamu sudah di folder project) dan jalankan:
php artisan make:controller CatatanController
Laravel akan membuat file baru di app/Http/Controllers/CatatanController.php. Buka file tersebut:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CatatanController extends Controller
{
//
}
Ini adalah controller kosong. Kamu akan menambahkan method (fungsi) di dalam class ini.
② Tambah Method ke Controller
Tambahkan method index untuk menampilkan daftar catatan:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CatatanController extends Controller
{
public function index()
{
$catatan = [
['id' => 1, 'judul' => 'Beli sayuran', 'isi' => 'Bayam, wortel, tomat'],
['id' => 2, 'judul' => 'Belajar Laravel', 'isi' => 'Selesai sampai Part 3'],
['id' => 3, 'judul' => 'Olahraga', 'isi' => 'Lari 30 menit pagi hari'],
];
return view('catatan.index', compact('catatan'));
}
}
['catatan' => $catatan]. Variabel $catatan dikirim ke view dengan nama catatan.
③ Buat View untuk Catatan
Buat folder catatan di dalam resources/views/, lalu buat file index.blade.php di dalamnya:
resources/views/catatan/index.blade.php
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Daftar Catatan</title>
<style>
body { font-family: sans-serif; max-width: 700px; margin: 40px auto; padding: 0 20px; }
h1 { color: #0f766e; }
.card { border: 1px solid #e2e8f0; border-radius: 8px; padding: 16px; margin-bottom: 12px; }
.card h3 { margin: 0 0 8px; color: #1e293b; }
.card p { margin: 0; color: #64748b; }
</style>
</head>
<body>
<h1>Daftar Catatan</h1>
<p>Total: {{ count($catatan) }} catatan</p>
@foreach ($catatan as $item)
<div class="card">
<h3>{{ $item['judul'] }}</h3>
<p>{{ $item['isi'] }}</p>
</div>
@endforeach
</body>
</html>
④ Daftarkan Route → Controller
Buka routes/web.php dan tambahkan route yang mengarah ke Controller:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CatatanController;
Route::get('/', function () {
return view('welcome');
});
// Arahkan /catatan ke method index di CatatanController
Route::get('/catatan', [CatatanController::class, 'index']);
Buka http://localhost:8000/catatan di browser — daftar catatan akan tampil!
⑤ Route Parameter — Detail Satu Catatan
Tambahkan method show di CatatanController untuk menampilkan detail satu catatan berdasarkan ID:
public function show($id)
{
// Sementara data masih hardcode
$semuaCatatan = [
1 => ['judul' => 'Beli sayuran', 'isi' => 'Bayam, wortel, tomat'],
2 => ['judul' => 'Belajar Laravel', 'isi' => 'Selesai sampai Part 3'],
3 => ['judul' => 'Olahraga', 'isi' => 'Lari 30 menit pagi hari'],
];
// Kalau ID tidak ada, tampilkan 404
if (!isset($semuaCatatan[$id])) {
abort(404);
}
$catatan = $semuaCatatan[$id];
return view('catatan.show', compact('catatan', 'id'));
}
Buat view-nya di resources/views/catatan/show.blade.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>{{ $catatan['judul'] }}</title>
<style>
body { font-family: sans-serif; max-width: 700px; margin: 40px auto; padding: 0 20px; }
a { color: #0f766e; }
</style>
</head>
<body>
<a href="/catatan">← Kembali ke daftar</a>
<h1>{{ $catatan['judul'] }}</h1>
<p>{{ $catatan['isi'] }}</p>
</body>
</html>
Tambahkan route parameter di routes/web.php:
// {id} adalah parameter yang ditangkap dari URL
Route::get('/catatan/{id}', [CatatanController::class, 'show']);
Coba buka http://localhost:8000/catatan/1, /catatan/2, /catatan/3. Masing-masing tampil berbeda!
Update View Index — Tambah Link ke Detail
Supaya bisa klik dari daftar ke detail, update catatan/index.blade.php:
@foreach ($catatan as $item)
<div class="card">
<h3><a href="/catatan/{{ $item['id'] }}">{{ $item['judul'] }}</a></h3>
<p>{{ $item['isi'] }}</p>
</div>
@endforeach
Ringkasan Alur Controller
URL: GET /catatan/2
↓
routes/web.php: Route::get('/catatan/{id}', [CatatanController::class, 'show'])
↓
CatatanController@show($id = 2)
↓
return view('catatan.show', compact('catatan', 'id'))
↓
resources/views/catatan/show.blade.php ditampilkan ke browser
Langkah Selanjutnya
Sejauh ini data masih hardcode di dalam controller. Di Part 3 — Database & Migration, kita akan setup database sungguhan dan menyimpan catatan ke tabel. Data tidak hilang saat server di-restart!
Komentar 0