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: