Bài tập

Model View Controller (MVC) trong PHP - Xây dựng ứng dụng mạnh mẽ

Huy Erick

Tưởng tượng bạn đang xây dựng một ứng dụng web mới và bạn muốn tối ưu hóa cấu trúc code của mình. Một trong những phương pháp phổ biến nhất để làm điều này là...

Tưởng tượng bạn đang xây dựng một ứng dụng web mới và bạn muốn tối ưu hóa cấu trúc code của mình. Một trong những phương pháp phổ biến nhất để làm điều này là sử dụng mô hình Model View Controller, hay còn gọi là MVC. Trong bài viết này, chúng ta sẽ tìm hiểu về MVC trong PHP và cách nó giúp bạn xây dựng ứng dụng mạnh mẽ và dễ bảo trì.

MVC trong PHP là gì?

MVC là một mô hình kiến trúc phần mềm phổ biến trong lập trình. Nó bao gồm ba thành phần chính: Model, View, và Controller.

  • Model: Quản lý dữ liệu và thực hiện các hoạt động liên quan đến dữ liệu. Model thường lưu trữ và truy xuất các thực thể từ cơ sở dữ liệu và chứa các logic xử lý ứng dụng.
  • View: Hiển thị dữ liệu từ Model dưới một định dạng cụ thể cho người dùng. View có thể được hiểu tương tự như các mẫu trang trong các ứng dụng web phổ biến như WordPress hoặc Joomla.
  • Controller: Là trình điều khiển quản lý tương tác giữa Model và View. Controller nhận yêu cầu từ người dùng, gọi các hàm trong Model để thực hiện các hoạt động yêu cầu và gửi dữ liệu cho View để hiển thị cho người dùng.

Controller trong MVC

Controller là thành phần đầu tiên nhận các yêu cầu từ người dùng. Nó phân tích cú pháp, khởi tạo và gọi các hàm trong Model, và nhận phản hồi từ Model để gửi đến View.

Trong PHP, Controller thường được triển khai bởi một lớp được gọi là Controller. Bạn có thể tạo một tệp PHP index.php là điểm nhập của ứng dụng. Tệp PHP này sẽ định nghĩa một đối tượng Controller và gọi phương thức "invoke" để bắt đầu quy trình xử lý yêu cầu.

Ví dụ:

// index.php file
include_once("controller/Controller.php");

$controller = new Controller();
$controller->invoke();

Lớp Controller có một hàm khởi tạo và một hàm đơn lẻ. Hàm khởi tạo tạo một đối tượng Model và khi một yêu cầu được thực hiện, Controller sẽ xác định dữ liệu nào được yêu cầu từ Model. Sau đó, nó gọi Model để lấy dữ liệu và truyền nó cho View để hiển thị. Lưu ý rằng Controller không biết về cơ sở dữ liệu hoặc cách các trang được tạo.

include_once("model/Model.php");

class Controller {
    public $model;

    public function __construct() {
        $this->model = new Model();
    }

    public function invoke() {
        if (!isset($_GET['book'])) {
            // Hiển thị danh sách tất cả các sách có sẵn
            $books = $this->model->getBookList();
            include 'view/booklist.php';
        } else {
            // Hiển thị thông tin của sách được yêu cầu
            $book = $this->model->getBook($_GET['book']);
            include 'view/viewbook.php';
        }
    }
}

Trên đây là một ví dụ triển khai đơn giản của MVC trong PHP. Trong triển khai thực tế, các framework PHP thường sử dụng các phương pháp và quy tắc mô hình phù hợp hơn nhiều. Tuy nhiên, khả năng triển khai của MVC là không giới hạn. Bạn có thể triển khai các thành phần MVC bằng ngôn ngữ khác nhau, trên các máy chủ khác nhau hoặc thậm chí sử dụng Ajax để triển khai View trực tiếp trong JavaScript.

Model và các lớp đối tượng của MVC trong PHP

Model đại diện cho dữ liệu và logic ứng dụng. Nó chịu trách nhiệm cho nhiều hoạt động khác nhau, bao gồm lưu trữ, cập nhật hoặc xóa dữ liệu ứng dụng. Mô hình cũng chứa logic ứng dụng, nhưng không nên thực hiện các hoạt động đó bên trong Controller hoặc View.

Trong ví dụ trên, Model được đại diện bởi hai lớp: Lớp "Model" và lớp "Book". Lớp "Book" là một lớp đối tượng đơn giản. Nó tương tác với View và biểu diễn dữ liệu được hiển thị bởi View. Trong triển khai mô hình MVC, Model chỉ nên chứa các lớp đối tượng và không nên chứa bất kỳ logic ứng dụng nào. Nhiệm vụ duy nhất của Model là lưu trữ dữ liệu.

Tùy thuộc vào cách triển khai, các đối tượng đối tượng có thể được thay bằng XML hoặc dữ liệu JSON. Trong đoạn code trên, bạn có thể thấy cách Model trả về một cuốn sách cụ thể hoặc một danh sách các sách có sẵn.

include_once("model/Book.php");

class Model {
    public function getBookList() {
        // Giả lập dữ liệu từ cơ sở dữ liệu
        return array(
            "Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic book."),
            "Moonwalker" => new Book("Moonwalker", "J. Walker", ""),
            "PHP for Dummies" => new Book("PHP for Dummies", "Some Smart Guy", "")
        );
    }

    public function getBook($title) {
        // Sử dụng hàm getBookList() để lấy tất cả sách, sau đó trả về sách được yêu cầu
        // Trong thực tế, điều này sẽ được thực hiện qua truy vấn cơ sở dữ liệu
        $allBooks = $this->getBookList();
        return $allBooks[$title];
    }
}

View (Presentation)

View là thành phần hiển thị dữ liệu từ Model dưới một định dạng mà người dùng có thể truy cập được. Dữ liệu có thể có các định dạng khác nhau từ Model, chẳng hạn như các đối tượng đơn giản, cấu trúc XML, JSON, ...

View không nên được nhầm lẫn với các mẫu trang vì chúng có cách hoạt động và giải quyết các vấn đề khác nhau. Cả hai đều giảm sự phụ thuộc của View vào phần còn lại của hệ thống và tách rời các phần tử giao diện người dùng (HTML) khỏi mã. Controller ủy quyền dữ liệu từ Model cho một phần tử View cụ thể, thường được liên kết với thực thể chính trong Model.

Trong ví dụ của chúng ta, chúng ta có hai tệp View: viewbook.php để hiển thị thông tin về một cuốn sách và booklist.php để hiển thị danh sách các sách.

viewbook.php



title . '
'; echo 'Author:' . $book->author . '
'; echo 'Description:' . $book->description . '
'; ?>

booklist.php



     $book) {
                    echo '';
                }
            ?>
        
Title Author Description
'.$book->title.''.$book->author.''.$book->description.'

Ví dụ trên là một triển khai đơn giản của MVC trong PHP. Các framework PHP phổ biến thường sử dụng các phương pháp và quy tắc mô hình hiệu quả hơn rất nhiều. Tuy nhiên, khả năng triển khai của MVC là vô tận. Bạn có thể triển khai các thành phần MVC bằng ngôn ngữ khác nhau, trên các máy chủ khác nhau hoặc sử dụng Ajax để triển khai View trực tiếp trong JavaScript.

Kết luận

MVC là một mô hình kiến trúc quan trọng và cần thiết để xây dựng các framework mạnh mẽ. Trong bài viết này, chúng ta đã tìm hiểu về MVC trong PHP và cách nó giúp bạn xây dựng các ứng dụng mạnh mẽ và dễ bảo trì. MVC giúp bạn tách biệt Model, View và Controller, làm cho ứng dụng của bạn linh hoạt hơn và dễ dàng bảo trì. Mỗi thành phần trong MVC có thể được thay đổi hoặc thay thế mà không ảnh hưởng đến nhau. Bạn cũng đã biết về các ưu điểm của MVC như giảm sự phụ thuộc và dễ dàng kiểm tra và gỡ lỗi từng thành phần riêng lẻ.

Nếu bạn quan tâm đến việc học PHP hoặc các ngôn ngữ lập trình khác, hãy tham gia khóa học lập trình của chúng tôi tại T3H để nâng cao kỹ năng của bạn. Hy vọng bài viết này đã có ích cho bạn.

Tham khảo: Khóa học lập trình PHP

1