Memahami MVC Sederhana dengan PHP

Model View Controller User/Request Response

Ilustrasi sederhana alur kerja Model-View-Controller (MVC).

Arsitektur Model-View-Controller (MVC) adalah pola desain perangkat lunak yang memisahkan aplikasi menjadi tiga komponen utama yang saling berhubungan. Pola ini sangat populer dalam pengembangan web modern, termasuk ketika kita menggunakan PHP. Tujuannya utama adalah meningkatkan modularitas, memudahkan pemeliharaan kode, dan memisahkan logika bisnis dari presentasi data.

Mengapa Menggunakan MVC dalam PHP?

Sebelum era framework modern seperti Laravel atau Symfony, banyak aplikasi PHP dibangun secara prosedural, mencampur kode HTML dengan logika database. Hal ini menyebabkan "spaghetti code." MVC mengatasi masalah ini dengan prinsip pemisahan tanggung jawab:

Model: Bertanggung jawab atas data dan logika bisnis (misalnya, koneksi database, query SQL, validasi data).

View: Bertanggung jawab atas tampilan antarmuka pengguna (biasanya file HTML atau template PHP).

Controller: Bertindak sebagai perantara. Menerima input dari pengguna (request), memanggil Model untuk mendapatkan atau memanipulasi data, lalu memilih View yang sesuai untuk menampilkan hasilnya.

Contoh Program MVC Sederhana dengan PHP

Untuk memahami konsep ini, mari kita buat struktur direktori dasar dan contoh implementasi tanpa menggunakan library atau framework eksternal. Anggap kita ingin menampilkan daftar produk sederhana.

Struktur Direktori

Struktur paling dasar yang kita butuhkan adalah:

/aplikasi_mvc_sederhana
|-- index.php  (Router/Front Controller)
|-- /app
    |-- /controllers
        |-- ProdukController.php
    |-- /models
        |-- ProdukModel.php
    |-- /views
        |-- daftar_produk.php
        

1. Model (ProdukModel.php)

Model ini akan mensimulasikan pengambilan data dari database. Dalam aplikasi nyata, ini akan berisi fungsi untuk SELECT, INSERT, dll.

<?php
class ProdukModel {
    public function getAllProduk() {
        // Simulasi koneksi database dan query
        return [
            ['id' => 1, 'nama' => 'Laptop Gaming', 'harga' => 15000000],
            ['id' => 2, 'nama' => 'Mouse Wireless', 'harga' => 350000],
            ['id' => 3, 'nama' => 'Keyboard Mekanikal', 'harga' => 1200000],
        ];
    }
}
?>

2. Controller (ProdukController.php)

Controller menghubungkan Model dan View. Ia menerima request, meminta data dari Model, dan meneruskan data tersebut ke View.

<?php
require_once 'models/ProdukModel.php';

class ProdukController {
    public function tampilkanDaftar() {
        $model = new ProdukModel();
        
        // 1. Ambil data dari Model
        $dataProduk = $model->getAllProduk();
        
        // 2. Muat View dan berikan data
        require 'views/daftar_produk.php';
    }
}
?>

3. View (daftar_produk.php)

View hanya bertugas menampilkan data yang diterimanya dari Controller dalam format HTML. Tidak ada logika bisnis di sini.

<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <title>Daftar Produk</title>
</head>
<body>
    <h1>Daftar Barang Dagangan</h1>
    
    <table border="1" width="100%">
        <tr>
            <th>ID</th>
            <th>Nama Produk</th>
            <th>Harga</th>
        </tr>
        
        <?php foreach ($dataProduk as $produk): ?>
        <tr>
            <td><?= $produk['id'] ?></td>
            <td><?= $produk['nama'] ?></td>
            <td>Rp </td>
        </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

4. Front Controller (index.php)

Ini adalah titik masuk tunggal aplikasi (seperti yang dilakukan oleh banyak framework modern). Ia menginisialisasi sistem dan menentukan Controller mana yang harus dipanggil berdasarkan URL.

<?php
// File index.php (Router Sederhana)

// Auto-load semua kelas yang dibutuhkan
require_once 'app/models/ProdukModel.php';
require_once 'app/controllers/ProdukController.php';

// Tentukan aksi berdasarkan parameter (misalnya, dari URL ?page=produk)
$page = $_GET['page'] ?? 'produk'; 

if ($page == 'produk') {
    $controller = new ProdukController();
    // Panggil metode yang sesuai di controller
    $controller->tampilkanDaftar();
} else {
    echo "Halaman tidak ditemukan.";
}
?>

Ketika pengguna mengakses index.php?page=produk, alur kerjanya adalah: index.php memanggil ProdukController, yang kemudian meminta data dari ProdukModel, dan terakhir Controller memilih daftar_produk.php (View) untuk merender output HTML yang indah. Contoh program mvc sederhana dengan php ini menunjukkan bagaimana pemisahan tugas membuat kode lebih terstruktur, bahkan pada skala kecil.

Kesimpulan

Meskipun contoh di atas sangat mendasar dan belum menangani routing kompleks atau keamanan, ia berhasil mendemonstrasikan inti dari pola MVC. Dengan mengadopsi struktur ini, kode PHP Anda menjadi lebih mudah diuji (unit testing), dikembangkan oleh tim, dan diperluas di masa depan, menjadikannya fondasi kuat sebelum beralih ke framework yang lebih matang.