PHP MVC – Tạo mô hình MVC

1. MVC là gì?

MVC là một mô hình thiết kế, giúp bạn tổ chức code theo từng phần độc lập với nhau, và các phần tương tác với nhau theo một cách nhất định.

Mô hình MVC gồm 3 lớp: Model, View, Controller. Cụ thể như sau:

  • Model: Lớp này chịu trách nhiệm quản lí dữ liệu: giao tiếp với cơ sở dữ liệu, chịu trách nhiệm lưu trữ hoặc truy vấn dữ liệu.
  • View: Lớp này chính là giao diện của ứng dụng, chịu trách nhiệm biểu diễn dữ liệu của ứng dụng thành các dạng nhìn thấy được.
  • Controller: Lớp này đóng vai trò quản lí và điều phối luồng hoạt động của ứng dụng. Tầng này sẽ nhận request từ client, điều phối các Model và View để có thể cho ra output thích hợp và trả kết quả về cho người dung.

Mô hình hoạt động

Trình duyệt gửi một request lên server, server nhận được request sẽ phân tích và gửi dữ liệu vào controller dựa vào router điều hướng. Trong vài trường hợp thì controller sẽ render luôn ra view (một template được chuyển thành HTML) và gửi trả về cho trình duyệt. Nhưng thông thường, cho các trang web động, controller sẽ tương tác với một model (đại diện cho một phần tử ví dụ như Post, chịu trách nhiệm giao tiếp với cơ sở dữ liệu). Sau khi gọi vào model, controller sẽ render view với dữ liệu lấy được và trả kết quả về cho trình duyệt để hiển thị.

2. Cấu trúc dự án

3. Model

Với mỗi bảng cơ sở dữ liệu chúng ta xây dựng các phương thức để thêm đọc sửa xoá (CRUD – Create Read Update Delete) cơ sở dữ liệu

3.1. Bảng categories

3.1.1. Create : Thêm mới 1 category

function insert_category($name, $img){
    global $pdo;
    $sql = "INSERT INTO CATEGORIES(ID, NAME, IMG) VALUES(NULL, :name, :img)";
    $stmt = $pdo->prepare($sql);
    
   
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':img', $img);

    $stmt->execute();
}

Trong thư mục core tạo tập tin với tên category_db.php để soạn thảo code

3.1.2. Read:

Lấy toàn bộ categories

<?php
require_once 'mysql.php';
$pdo = get_pdo();

function get_all_categories(){
    global $pdo;

    $sql = "SELECT * FROM CATEGORIES";
    $stmt = $pdo->prepare($sql);
    

    $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     
    // Lấy danh sách kết quả
    $result = $stmt->fetchAll();
     
    $category_list = array();

    // Lặp kết quả
    foreach ($result as $row){
        $category_list[] = array(
            'id' => $row['id'],
            'name' => $row['name'],
            'img' => $row['img']
        );
    }
    
    return $category_list;
}

Lấy 1 category

function get_category($category_id){
    global $pdo;

    $sql = "SELECT * FROM CATEGORIES WHERE ID=:id";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':id', $category_id);
    

    $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     
    // Lấy danh sách kết quả
    $result = $stmt->fetchAll();

    // Lặp kết quả
    foreach ($result as $row){
        return array(
            'id' => $row['id'],
            'name' => $row['name'],
            'img' => $row['img'],
            'description' => $row['description'],
        );
    }

    return null;
}

3.1.3. Update: Cập nhật 1 category

function update_category($id, $name, $img){
    global $pdo;
    $sql = "UPDATE CATEGORIES SET NAME=:name, IMG=:img WHERE ID=:id";
    $stmt = $pdo->prepare($sql);

   
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':img', $img);
    $stmt->bindParam(':id', $id);

    $stmt->execute();
}

3.1.4. Delete: Xoá 1 category trong categories

function delete_category($category_id){
    global $pdo;

    $sql = "DELETE FROM CATEGORIES WHERE ID=:id";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':id', $category_id);

    $stmt->execute();

}

Bảng products

Tương tự với bảng categories chúng ta sẽ xây dựng tập tin product_db.php trong thư mục core với nội dung sau

Github:

Bảng users

Tương tự với bảng categories chúng ta sẽ xây dựng tập tin product_db.php trong thư mục core với nội dung sau

Github:

Bảng Orders

Tương tự với bảng categories chúng ta sẽ xây dựng tập tin product_db.php trong thư mục core với nội dung sau

Github:

Bảng OrderItems

Tương tự với bảng categories chúng ta sẽ xây dựng tập tin product_db.php trong thư mục core với nội dung sau

Github: