Hướng dẫn xây dựng mô hình mvc trong php

PHP là một ngôn ngữ kịch bản rất mạnh mẽ dùng để xây dựng website, hiện nay có nhiều framework được phổ biến và được developer yêu thích sử dụng. Các framework này đều được xây dựng theo chuẩn mô hình MVC. Vậy MVC là gì, khái niệm ra sao và cách chúng hoạt động như thế nào? Cùng zhair.com.vn tìm hiểu về MVC trong PHP qua bài viết này bạn nhé!


MVC trong PHP là gì?

*

MVC - mô hình phổ biến trong lập trình

Model View Controller hay còn gọi tắt là MVC là một mẫu kiến trúc phần mềm trong kỹ thuật kỹ sư phần mềm. Mô hình MVC được cấu thành từ ba lớp như sau:

Model: có trách nhiệm quản lý dữ liệu; nó lưu trữ và truy xuất các thực thể được ứng dụng sử dụng, thường là từ cơ sở dữ liệu và chứa logic được ứng dụng thực hiện.View: có nhiệm vụ hiển thị dữ liệu do mô hình cung cấp ở một định dạng cụ thể. Nó có cách sử dụng tương tự với các mô-đun mẫu có trong một số ứng dụng web phổ biến, như wordpress, joomla,…Controller: Bộ điều khiển xử lý các lớp mô hình và khung nhìn để làm việc cùng nhau. Bộ điều khiển nhận được yêu cầu từ máy khách, gọi model để thực hiện các hoạt động được yêu cầu và gửi dữ liệu đến Chế độ xem. Chế độ xem định dạng dữ liệu được hiển thị cho người dùng, trong ứng dụng web dưới dạng đầu ra html.

Bạn đang xem: Hướng dẫn xây dựng mô hình mvc trong php

Controller trong MVC

Bộ điều khiển là thứ đầu tiên nhận yêu cầu, phân tích cú pháp, khởi tạo và gọi mô hình cũng như nhận phản hồi của mô hình và gửi nó đến lớp trình bày. Trên thực tế nó là mỗi liên kết giữa Model và View, một framework nhỏ nơi Model và View có thể được plug in. Trong quá trình triển khai PHP, controller chỉ được thực hiện bởi một lớp được đặt tên là bộ điều khiển đột xuất. Điểm nhập ứng dụng sẽ là index.php. Tệp php sẽ ủy quyền tất cả các yêu cầu cho bộ điều khiển.

Ví dụ:

// index.php file include_once("controller/Controller.php"); $controller = new Controller(); $controller->invoke();

Lớp Controller chỉ có một hàm duy nhất và một hàm tạo. Hàm khởi tạo sẽ tạo một lớp mô hình và khi một yêu cầu được thực hiện, bộ điều khiển sẽ quyết định dữ liệu nào được yêu cầu từ mô hình. Sau đó, nó gọi lớp mô hình để lấy dữ liệu. Sau đó, nó gọi dữ liệu và truyền tương ứng đến màn hình. Lưu ý rằng controller không biết bất cứ điều gì về cơ sở dữ liệu hoặc về 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">)) { // no special book is requested, we"ll show a list of all available books $books = $this->model->getBookList(); include "view/booklist.php";  }  else  {  // show the requested book  $book = $this->model->getBook($_GET<"book">);  include "view/viewbook.php"; } } }

 

Trong sơ đồ dưới đây, bạn có thể quan sát luồng hoạt động trong khi yêu cầu http

*

 Luồng hoạt động trong khi yêu cầu http

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

Model đại diện cho dữ liệu và logic của một ứng dụng mà nhiều người gọi là logic nghiệp vụ. Thông thường nó sẽ chịu trách nhiệm về:

lưu trữ, xóa, cập nhật dữ liệu ứng dụng. Nói chung, nó bao gồm các hoạt động cơ sở dữ liệu, nhưng việc triển khai các hoạt động tương tự như vậy gọi các dịch vụ web bên ngoài hoặc API không phải là một điều bất thường.đóng gói logic ứng dụng. Đây là lớp sẽ triển khai tất cả logic của ứng dụng. Những sai lầm phổ biến nhất là thực hiện các hoạt động logic ứng dụng bên trong bộ điều khiển hoặc lớp xem (bản trình bày).

Xem thêm: Review 15 Kem Dưỡng Ẩm Cho Da Nhạy Cảm An Toàn Cho Da Nhạy Cảm Nhật Tốt 2022

Trong ví dụ trên, model được đại diện bởi hai lớp: Lớp “Model” và lớp “Book”. Mô hình này không cần bất kỳ bản trình bày nào khác. Lớp “Book” là một lớp thực thể. Lớp này sẽ tiếp xúc với lớp View và thể hiện định dạng được xuất bởi dạng xem model. Trong quá trình triển khai mẫu MVC mô hình chỉ nên hiển thị các lớp thực thể và không được đóng gói bằng bất kỳ logic nghiệp vụ nào. Mục đích duy nhất của nó là giữ dữ liệu.

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

include_once("model/Book.php"); class Model { public function getBookList() { // here goes some hardcoded values to simulate the database 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) { // we use the previous function to get all the books and then we return the requested one. // in a real life scenario this will be done through a db select command $allBooks = $this->getBookList(); return $allBooks<$title>; } }

View (Presentation)

View (lớp trình bày) chịu trách nhiệm định dạng dữ liệu nhận được từ mô hình dưới dạng 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ừ mô hình: các đối tượng đơn giản (đôi khi được gọi là Đối tượng Giá trị), cấu trúc xml, json,…

View không nên nhầm lẫn với cơ chế mẫu đôi khi chúng hoạt động theo cách giống nhau và giải quyết các vấn đề tương tự. Cả hai sẽ làm giảm sự phụ thuộc của lớp trình bày với phần còn lại của hệ thống và tách các phần tử trình bày (html) khỏi mã. Bộ điều khiển ủy quyền dữ liệu từ mô hình đến một phần tử khung nhìn cụ thể, thường được liên kết với thực thể chính trong mô hình.

Ví dụ: hoạt động “tài khoản hiển thị” sẽ được liên kết với chế độ xem “tài khoản hiển thị”. Lớp xem có thể sử dụng hệ thống mẫu để hiển thị các trang html. Cơ chế mẫu có thể sử dụng lại các phần cụ thể của trang: đầu trang, menu, chân trang, danh sách và bảng,…. Nói theo ngữ cảnh của mẫu MVC

Trong ví dụ của chúng tôi, dạng xem chỉ chứa 2 tệp, một tệp để hiển thị một cuốn sách và tệp còn lại để hiển thị danh sách sách.

viewbook.php

view plaincopy to clipboardprint?

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