Model View Controller (MVC) Trong PHP - Tìm Hiểu Về MVC - T3H

MVC trong PHP là gì?

MVC trong PHP

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.
  • >>> Đọc thêm: Top 5 phần mềm viết PHP tốt nhất trong năm 2021

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ụ:

  1. // index.php file  
  2. include_once("controller/Controller.php");  
  3.   
  4. $controller = new Controller();  
  5. $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.

  1. include_once("model/Model.php");  
  2.   
  3. class Controller {  
  4.      public $model;   
  5.   
  6.      public function __construct()    
  7.      {    
  8.           $this->model = new Model();  
  9.      }   
  10.       
  11.      public function invoke()  
  12.      {  
  13.           if (!isset($_GET['book']))  
  14.           {  
  15.                // no special book is requested, we'll show a list of all available books  
  16.                $books = $this->model->getBookList();  
  17.                include 'view/booklist.php'; 
  18.           } 
  19.           else 
  20.           { 
  21.                // show the requested book 
  22.                $book = $this->model->getBook($_GET['book']); 
  23.                include 'view/viewbook.php';  
  24.           }  
  25.      }  
  26. }  

 

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

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).

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:

  1. include_once("model/Book.php");  
  2.   
  3. class Model {  
  4.     public function getBookList()  
  5.     {  
  6.         // here goes some hardcoded values to simulate the database  
  7.         return array(  
  8.             "Jungle Book" => new Book("Jungle Book", "R. Kipling", "A classic book."),  
  9.             "Moonwalker" => new Book("Moonwalker", "J. Walker", ""),  
  10.             "PHP for Dummies" => new Book("PHP for Dummies", "Some Smart Guy", "")  
  11.         );  
  12.     }  
  13.       
  14.     public function getBook($title)  
  15.     {  
  16.         // we use the previous function to get all the books and then we return the requested one.  
  17.         // in a real life scenario this will be done through a db select command  
  18.         $allBooks = $this->getBookList();  
  19.         return $allBooks[$title];  
  20.     }  
  21.       
  22.       
  23. }  

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

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?

  1. <html>  
  2. <head></head>  
  3.   
  4. <body>  
  5.   
  6.     <?php   
  7.   
  8.         echo 'Title:' . $book->title . '<br/>';  
  9.         echo 'Author:' . $book->author . '<br/>';  
  10.         echo 'Description:' . $book->description . '<br/>';  
  11.   
  12.     ?>  
  13.   
  14. </body>  
  15. </html>  

 

booklist.php

view plaincopy to clipboardprint?

 <html>  

  • <head></head>  
  •   
  • <body>  
  •   
  •     <table>  
  •         <tbody><tr><td>Title</td><td>Author</td><td>Description</td></tr></tbody>  
  •         <?php   
  •   
  •             foreach ($books as $title => $book)  
  •             {  
  •                 echo '<tr><td><a href="index.php?book='.$book->title.'">'.$book->title.'</a></td><td>'.$book->author.'</td><td>'.$book->description.'</td></tr>';  
  •             }  
  •   
  •         ?>  
  •     </table>  
  •   
  • </body>  
  • </html>  

 

Ví dụ trên là một triển khai đơn giản trong PHP. Hầu hết các khung công tác web PHP dựa trên MVC đều có cách triển khai tương tự, có hình dạng tốt hơn nhiều. Tuy nhiên, khả năng xảy ra mô hình MVC là vô tận. Ví dụ, các lớp khác nhau có thể được thực hiện bằng các ngôn ngữ khác nhau hoặc được phân phối trên các máy khác nhau.

Các ứng dụng AJAX có thể triển khai lớp View trực tiếp trong Javascript trong trình duyệt, gọi các dịch vụ JSON. Bộ điều khiển có thể được triển khai một phần trên máy khách, một phần trên máy chủ…

  • Bài đăng này không nên kết thúc trước khi liệt kê các ưu điểm của mẫu Model View Controller:Model và View được tách biệt, làm cho ứng dụng linh hoạt hơn.
  • Mô hình và chế độ xem có thể được thay đổi riêng biệt hoặc thay thế. Ví dụ: một ứng dụng web có thể được chuyển đổi trong một ứng dụng khách thông minh chỉ bằng cách viết một mô-đun Chế độ xem mới hoặc một ứng dụng có thể sử dụng các dịch vụ web trong phần phụ trợ thay vì cơ sở dữ liệu, chỉ cần thay thế mô-đun mô hình.
  • Mỗi mô-đun có thể được kiểm tra và gỡ lỗi riêng biệt.

Kết luận: MVC trong PHP là mô hình quan trọng và cần thiết để xây dựng nên các framework mạnh mẽ. Bài viết trên đã giới thiệu tới bạn về MVC trong PHP, hy vọng bạn thấy bài viết này hữu ích. Cùng tìm hiểu thêm về  PHP và các ngôn ngữ lập trình khác qua khóa học lập trình tại T3H bạn nhé!

 

Từ khóa » Tìm Hiểu Về Mô Hình Mvc