Day 3 — Controller & Data ke View
Fase: 1 — Fundamental Laravel | Minggu: 1 | Hari: Rabu
🎯 Tujuan Hari Ini
Peserta mampu membuat Controller sendiri dan memindahkan logika dari routes/web.php ke dalam Controller, serta mengirimkan data dari Controller ke View (Blade).
📋 Task Wajib
1. Mengapa Perlu Controller?
Kemarin kita menaruh logika langsung di routes/web.php. Itu tidak baik untuk project yang besar karena file route akan menjadi sangat berantakan. Controller adalah tempat yang tepat untuk menaruh logika.
Sebelum (Buruk):
// routes/web.php
Route::get('/tentang', function () {
$data = ['nama' => 'Program Magang', 'tahun' => 2024];
return view('tentang', $data);
});Sesudah (Baik):
// routes/web.php
Route::get('/tentang', [PageController::class, 'tentang']);
// app/Http/Controllers/PageController.php
public function tentang() {
$data = ['nama' => 'Program Magang', 'tahun' => 2024];
return view('tentang', $data);
}2. Buat Controller Baru
Jalankan perintah Artisan di terminal:
php artisan make:controller PageControllerCek hasilnya: file baru muncul di app/Http/Controllers/PageController.php.
3. Isi Controller dengan Method
Buka app/Http/Controllers/PageController.php dan isi seperti ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PageController extends Controller
{
// Method untuk halaman Home
public function home()
{
$info = [
'judul' => 'Platform Magang RPL',
'deskripsi' => 'Program magang intensif 1 bulan berbasis Laravel',
'tahun' => date('Y'),
];
return view('home', $info);
}
// Method untuk halaman Tentang
public function tentang()
{
$anggota = [
['nama' => 'Budi', 'role' => 'Project Manager'],
['nama' => 'Sari', 'role' => 'Backend Developer'],
['nama' => 'Riko', 'role' => 'Frontend Developer'],
['nama' => 'Dewi', 'role' => 'QA Tester'],
];
return view('tentang', ['anggota' => $anggota]);
}
// Method untuk halaman Kontak
public function kontak()
{
return view('kontak');
}
}4. Update routes/web.php
Ganti semua route lama dengan route baru yang mengarah ke Controller:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PageController;
Route::get('/', [PageController::class, 'home']);
Route::get('/tentang', [PageController::class, 'tentang']);
Route::get('/kontak', [PageController::class, 'kontak']);5. Buat / Update Views
resources/views/home.blade.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>{{ $judul }}</title>
</head>
<body>
<h1>{{ $judul }}</h1>
<p>{{ $deskripsi }}</p>
<p>Tahun: {{ $tahun }}</p>
<nav>
<a href="/">Home</a> |
<a href="/tentang">Tentang</a> |
<a href="/kontak">Kontak</a>
</nav>
</body>
</html>resources/views/tentang.blade.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Tentang Tim</title>
</head>
<body>
<h1>Tim Magang</h1>
<ul>
@foreach ($anggota as $orang)
<li><strong>{{ $orang['nama'] }}</strong> — {{ $orang['role'] }}</li>
@endforeach
</ul>
<a href="/">← Kembali ke Home</a>
</body>
</html>resources/views/kontak.blade.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Kontak</title>
</head>
<body>
<h1>Hubungi Kami</h1>
<p>Email: magang@brin.go.id</p>
<a href="/">← Kembali ke Home</a>
</body>
</html>6. Uji Semua Halaman
Akses ketiga URL dan pastikan semuanya tampil tanpa error:
http://127.0.0.1:8000/→ Tampil judul dan deskripsi dari variabelhttp://127.0.0.1:8000/tentang→ Tampil daftar 4 anggota timhttp://127.0.0.1:8000/kontak→ Tampil halaman kontak
📝 Laporan ke Mentor
📌 LAPORAN HARIAN — Day 3
Nama : [Nama Lengkap]
Role : [Role Kamu]
✅ Yang saya kerjakan hari ini:
- [ ] Membuat PageController dengan php artisan make:controller
- [ ] Mengisi 3 method: home(), tentang(), kontak()
- [ ] Update routes/web.php ke arah Controller
- [ ] Membuat 3 View dan menampilkan data dari Controller
📸 Screenshot Wajib:
1. Browser di /tentang menampilkan daftar 4 anggota tim dari array
2. Isi file PageController.php di VSCode
🧠 Apa yang saya pelajari hari ini:
[Jelaskan dengan kata-kata sendiri: kenapa kita pindah logika dari route ke controller?]
❓ Kendala:
[Tulis jika ada]⚠️ Yang Sering Error di Day 3
Class PageController does not exist→ Lupause App\Http\Controllers\PageController;di routes/web.php.Undefined variable $judul→ Pastikan nama variabel direturn view('home', $info)sesuai dengan yang di-pass. Gunakan compact() jika mau lebih rapi:return view('home', compact('judul', 'deskripsi')).
Catatan Mentor
Minta peserta untuk berlatih menambah satu method baru secara mandiri, misalnya method galeri() yang menampilkan array berisi nama-nama foto. Ini melatih kemandirian mereka.