Mô hình MVC (Model-View-Controller) là một kiến trúc thiết kế phần mềm giúp tổ chức mã nguồn ứng dụng theo ba thành phần chính: Model (Mô hình), View (Giao diện) và Controller (Bộ điều khiển). Việc sử dụng mô hình MVC giúp tách biệt các phần của ứng dụng, làm cho mã nguồn dễ quản lý, bảo trì và mở rộng hơn.

Dưới đây là hướng dẫn chi tiết về cách triển khai mô hình MVC với PHP thuần (không sử dụng framework).

1. Cấu Trúc Thư Mục

Trước tiên, tạo cấu trúc thư mục cơ bản cho ứng dụng MVC của bạn:

mvc-app/
│
├── controllers/
│   └── HomeController.php
│
├── models/
│   └── UserModel.php
│
├── views/
│   ├── home.php
│   └── user.php
│
├── index.php
└── config.php

2. Tạo File config.php

File config.php chứa các cấu hình cơ bản của ứng dụng, chẳng hạn như cấu hình cơ sở dữ liệu và các thông số khác.

config.php:

<?php
// Cấu hình cơ sở dữ liệu
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'mvc_app');

3. Tạo File index.php

File index.php là điểm khởi đầu của ứng dụng. Nó sẽ xử lý yêu cầu HTTP, phân tích URI và gọi các controller tương ứng.

index.php:

<?php
require_once 'config.php';

// Tải các lớp Controller và Model
function autoload($class) {
    $paths = [
        'controllers/' . $class . '.php',
        'models/' . $class . '.php'
    ];

    foreach ($paths as $path) {
        if (file_exists($path)) {
            require_once $path;
            break;
        }
    }
}

spl_autoload_register('autoload');

// Phân tích URI để xác định Controller và Method
$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
$uri = trim($uri, '/');
$uri = explode('/', $uri);

// Xác định Controller
$controller = !empty($uri[0]) ? ucfirst($uri[0]) . 'Controller' : 'HomeController';

// Xác định Method
$method = !empty($uri[1]) ? $uri[1] : 'index';

// Khởi tạo Controller
if (class_exists($controller) && method_exists($controller, $method)) {
    $controllerObj = new $controller();
    $controllerObj->$method();
} else {
    echo '404 Not Found';
}

4. Tạo Controller

Controller chịu trách nhiệm xử lý các yêu cầu từ người dùng và tương tác với Model để lấy dữ liệu. Sau đó, nó sẽ chọn View để hiển thị dữ liệu.

controllers/HomeController.php:

<?php

class HomeController {

    public function index() {
        $userModel = new UserModel();
        $users = $userModel->getUsers();
        include 'views/home.php';
    }
}

5. Tạo Model

Model là phần của ứng dụng xử lý dữ liệu, bao gồm việc truy vấn cơ sở dữ liệu và trả về dữ liệu cho Controller.

models/UserModel.php:

<?php

class UserModel {

    private $db;

    public function __construct() {
        $this->db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

        if ($this->db->connect_error) {
            die('Connection failed: ' . $this->db->connect_error);
        }
    }

    public function getUsers() {
        $query = 'SELECT * FROM users';
        $result = $this->db->query($query);

        if ($result->num_rows > 0) {
            return $result->fetch_all(MYSQLI_ASSOC);
        } else {
            return [];
        }
    }
}

6. Tạo View

View là phần hiển thị giao diện người dùng. Nó nhận dữ liệu từ Controller và hiển thị nó.

views/home.php:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home</title>
</head>
<body>
    <h1>Users List</h1>
    <ul>
        <?php foreach ($users as $user): ?>
            <li><?php echo htmlspecialchars($user['name']); ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

7. Tạo Cơ Sở Dữ Liệu

Tạo cơ sở dữ liệu và bảng cần thiết cho ứng dụng.

CREATE DATABASE mvc_app;

USE mvc_app;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

INSERT INTO users (name) VALUES ('Alice'), ('Bob'), ('Charlie');

8. Chạy Ứng Dụng

Lưu tất cả các tệp vào thư mục mvc-app. Đảm bảo rằng bạn đã cấu hình máy chủ web (như Apache hoặc Nginx) để trỏ đến thư mục mvc-app.

Truy cập ứng dụng của bạn qua trình duyệt với URL như http://localhost/mvc-app/. Bạn sẽ thấy danh sách người dùng được hiển thị trên trang chính.

Tóm Tắt

  • Model: Xử lý dữ liệu và tương tác với cơ sở dữ liệu.
  • View: Hiển thị dữ liệu cho người dùng.
  • Controller: Xử lý yêu cầu từ người dùng, tương tác với Model và chọn View để hiển thị dữ liệu.

Việc triển khai mô hình MVC bằng PHP thuần giúp bạn hiểu rõ hơn về cách hoạt động của kiến trúc này mà không phụ thuộc vào các framework. Nếu bạn có bất kỳ câu hỏi nào hoặc cần thêm thông tin, hãy cho mình biết nhé!

Xem thêm: Hướng dẫn chi tiết mô hình MVC với code PHP Thuần (Nâng Cao)