๐Study Case: "Simple Task Tracker" โ
Overview โ

Setelah memahami konsep teori dari mvc, saatnya kita mencobanya! Kita akan membangun sebuah Simple Task Tracker.
Apa itu Simple Task Tracker? โ
Sederhananya, ini adalah aplikasi pelacak tugas atau daftar kerja (to-do list). Aplikasi ini dirancang untuk membantu siapa saja mencatat daftar pekerjaan yang harus diselesaikan serta menandai tugas-tugas yang telah berhasil dikerjakan agar tidak ada yang terlewat. Jika kamu pernah menggunakan layanan seperti Notion, Google Tasks, atau Trello, maka kamu sudah memiliki gambaran tentang apa yang akan kita buat hari ini.
Mengapa ini penting? โ
Membangun proyek ini akan melatih insting kamu dalam menerapkan pola MVC secara nyata. Nantinya kita akan belajar bagaimana memisahkan urusan data, logika kendali, dan tampilan layar dalam satu alur kerja yang rapi.
Fitur Utama yang Akan Dibuat โ
๐ View Tasks: Melihat daftar apa saja yang harus dikerjakan.
โ Add Task: Menambah catatan tugas baru ke dalam daftar.
Struktur Data (Model) โ
id: Integertitle: Stringstatus: Boolean (completed/pending)
Struktur Project โ
simple-task-tracker/
โโโ models/
โ โโโ TaskModel.php
โโโ controllers/
โ โโโ TaskController.php
โโโ views/
โ โโโ tasks.php
โโโ index.phpKita Langsung Mulai saja!
๐๏ธ Membuat Model (models/TaskModel.php) โ
Model ini akan menangani data. Karena kita tidak menggunakan database nyata untuk kesederhanaan, kita akan menggunakan array statis untuk mensimulasikan data.
<?php
// models/TaskModel.php
class TaskModel {
// Fungsi untuk menginisialisasi data awal ke dalam session jika belum ada
private static function initSession() {
if (!isset($_SESSION['tasks'])) {
$_SESSION['tasks'] = [
['id' => 1, 'title' => 'Setup Project PHP Murni', 'is_completed' => true],
['id' => 2, 'title' => 'Membuat Struktur MVC', 'is_completed' => false],
['id' => 3, 'title' => 'Belajar Routing Sederhana', 'is_completed' => false],
];
}
}
// Mengambil semua data (Read)
public static function all() {
self::initSession(); // Pastikan session sudah terisi data awal
return $_SESSION['tasks'];
}
// Menambahkan data baru (Create)
public static function create($title) {
self::initSession(); // Pastikan session siap
$newTask = [
'id' => count($_SESSION['tasks']) + 1,
'title' => $title,
'is_completed' => false
];
// Menambahkan ke array session
$_SESSION['tasks'][] = $newTask;
return $newTask;
}
}
?>>๐ฎโโ๏ธ Membuat Controller (controllers/TaskController.php) โ
Controller ini akan menerima request, memanggil Model, dan mengirim data ke View.
<?php
// controllers/TaskController.php
require_once 'models/TaskModel.php';
class TaskController {
// Menampilkan daftar tugas
public function index() {
// 1. Meminta data ke Model
$tasks = TaskModel::all();
// 2. Mengirim data ke View
require_once 'views/tasks.php';
}
// Menyimpan tugas baru
public function store($request) {
// Validasi sederhana
if (isset($request['title']) && strlen($request['title']) >= 5) {
$title = htmlspecialchars($request['title']); // Sanitasi input
// Memerintah Model untuk menyimpan data
TaskModel::create($title);
// Redirect kembali ke halaman utama setelah menyimpan
header("Location: index.php");
exit();
} else {
// Tangani error validasi (misal: tampilkan pesan error)
echo "Error: Judul tugas minimal 5 karakter.";
}
}
}
?>๐ธ View (views/tasks.php) โ
View ini bertanggung jawab untuk menampilkan data yang dikirim dari Controller dalam bentuk HTML.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Simple Task Tracker</title>
</head>
<body>
<h1>Daftar Tugas</h1>
<ul>
<?php foreach ($tasks as $task): ?>
<li>
<?php echo $task['title']; ?>
- <?php echo $task['is_completed'] ? 'Selesai' : 'Belum Selesai'; ?>
</li>
<?php endforeach; ?>
</ul>
<h2>Tambah Tugas Baru</h2>
<form action="index.php?action=store" method="POST">
<label for="title">Judul Tugas:</label>
<input type="text" id="title" name="title" required>
<button type="submit">Tambah</button>
</form>
</body>
</html>๐ Router/Entry Point (index.php) โ
File ini berfungsi sebagai titik masuk utama aplikasi kita. Ia akan menerima semua request dan mengarahkannya ke metode yang tepat di Controller berdasarkan URL.
<?php
// index.php
// Mulai Session di bagian paling atas
session_start();
require_once 'controllers/TaskController.php';
$controller = new TaskController();
// Routing sederhana berdasarkan query parameter 'action'
$action = isset($_GET['action']) ? $_GET['action'] : 'index';
switch ($action) {
case 'index':
// Jika tidak ada action atau action=index, tampilkan daftar tugas
$controller->index();
break;
case 'store':
// Jika action=store dan request adalah POST, simpan tugas baru
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$controller->store($_POST);
} else {
echo "Invalid Request Method";
}
break;
default:
// Jika action tidak dikenal
echo "404 Not Found";
break;
}
?>Cara Menjalankan ๐ โ
Pastikan kamu telah menginstal PHP di komputer kamu.
Buka terminal/command prompt.
Arahkan ke folder simple-task-tracker.
Jalankan server bawaan PHP dengan perintah:
php -S localhost:8000Buka browser kamu dan kunjungi http://localhost:8000.
source code dapat di cek pada github.com/chentiro/task-tracker
