Skip to content

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):

php
// routes/web.php
Route::get('/tentang', function () {
    $data = ['nama' => 'Program Magang', 'tahun' => 2024];
    return view('tentang', $data);
});

Sesudah (Baik):

php
// 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:

bash
php artisan make:controller PageController

Cek 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
<?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
<?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:

html
<!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:

html
<!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:

html
<!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 variabel
  • http://127.0.0.1:8000/tentang → Tampil daftar 4 anggota tim
  • http://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 → Lupa use App\Http\Controllers\PageController; di routes/web.php.
  • Undefined variable $judul → Pastikan nama variabel di return 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.

Program Magang SMK RPL — Rekayasa Perangkat Lunak