Mô hình MVC trong PHP, tìm hiểu mô hình MVC PHP thông qua ví dụ

1. Giới thiệu về mô hình MVC trong PHP ( Model, Controller, View )

Mô hình MVC (model, controller, view) là mô hình chuẩn cho ứng dụng web được sử dụng nhiều nhất ngày nay. Mô hình MVC được sử dụng lần đầu tiên trong Smalltalk, sau đó được sử dụng phổ biến trong ngôn ngữ lập trình Java. Hiện nay, đã có hơn hàng chục PHP framework dựa trên mô hình này.
Bạn biết đấy, mô hình MVC hiện nay rất phổ biến trong các framework PHP, nhưng thực sự rất khó để tìm một bài viết với hướng dẫn chi tiết kèm theo những ví dụ đơn giản để chúng ta có thể hiểu được về nó. Đó là mục đích của hướng dẫn này
Mô hình MVC là viết tắt của 3 chữ Model, View, Controller. Mô hình này tách một ứng dụng web ra làm 3 thành phần đảm nhiệm chức năng tách biệt, thuận tiện cho việc xử lý và bảo trì

  • Model : Chịu trách nhiệm quản lý dữ liệu, nó lưu trữ và truy xuất các thực thể từ cơ sở dữ liệu như mysql, sql server, postresSQL,… đồng thời chưa các logic được thực thi bởi ứng dụng
  • View : Chịu trách nhiệm hiển thị dữ liệu đã được truy xuất từ model theo một format nào đó theo ý đồ của lập trình viên. Cách sử dụng của View tương tự như các module templates thường thấy trong các ứng dụng web phổ biến như WordPress, Joomla,…
  • Controller : trung gian, làm nhiệm vụ xử lý cho model và view tương tác với nhau. Controller nhận request từ client, sau đó gọi các model để thực hiện các hoạt động được yêu cầu và gửi ra ngoài View. View sẽ chịu trách nhiệm format lại data từ controller gửi ra và trình bày dữ liệu theo 1 định dạng đầu ra (html).
    Hình minh họa dưới đây sẽ cho bạn thấy rõ cách mô hình MVC hoạt động

mô hình mvc

2. Từng bước thực hành thực tế ví dụ về mô hình MVC

Đầu tiên, trong thư mục gốc của website ở local ( với wamp thì là www, với xampp thì là htdocs ), bạn tạo một thư mục đặt tên là mvc với cấu trúc thư mục như sau :

cấu trúc mvc

a. Controller

Đầu tiên tất cả chúng ta sẽ thao tác với controller, đây là nơi đầu tiền nhận những nhu yếu ( requests ), nghiên cứu và phân tích nhu yếu, khởi tạo và gọi Mã Sản Phẩm, sau đó nhận những trả lời ( response ) từ Model và gửi ra những lớp giao diện ( view ). Trong trong thực tiễn Controller được gọi từ điểm nguồn vào của ứng dụng là tập tin index.php. Tập tin này sẽ giao hàng loạt những nhu yếu gửi từ client cho controller giải quyết và xử lý .
Trong tập tin index.php ta thêm gõ đoạn code sau :

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

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

Trong tập tin Controller. php của tất cả chúng ta sẽ tạo ra 1 function là invoke và một hàm khởi tạo contructor. Hàm contructor chịu nghĩa vụ và trách nhiệm gọi và khởi tạo lớp Model. Trong hàm invoke sẽ quyết định hành động data nào được phép trả ra từ Model. Sau đó nó gọi Mã Sản Phẩm để lấy tài liệu thiết yếu, sau đó gửi tài liệu ra view. Đoạn code cực kỳ đơn thuần bên dưới sẽ cho bạn thấy điều đó. Lưu ý rằng, Controller không biết gì về cấu trúc database như thế nào cũng như là data gửi ra ngoài view sẽ có hình thù như thế nào bạn nhé. Nó chỉ có trách nhiệm gọi Mã Sản Phẩm bởi request từ client và gửi tài liệu ra ngoài view thôi nhé

include_once("model/Model.php");

class Controller {
     public $model;	

     public function __construct()  
     {  
          $this->model = new Model();
     } 
	
     public function invoke()
     {
          if (!isset($_GET['book']))
          {
               // nếu không có quyển sách nào được yêu cầu, thì hiển thị toàn bộ sách
               $books = $this->model->getBookList();
               include 'view/booklist.php';
          }
          else
          {
               // hiên thị sách được yêu cầu
               $book = $this->model->getBook($_GET['book']);
               include 'view/viewbook.php';
          }
     }
}

Mô hình dưới đây minh họa dễ hiểu hơn cho bạn

mô hình diagram mvc

b. Model

Model đại diện thay mặt cho tài liệu và logic của ứng dụng, thường hay gọi là business logic. Model có nghĩa vụ và trách nhiệm :
– Thêm, xóa sửa tài liệu, …
– Là nơi thực thi logic nhiệm vụ của ứng dụng. Đối với những bạn mới khám phá về MVC, tất cả chúng ta thường nhầm lẫn và thực thì logic của nhiệm vụ ở bên trong Controller hoăc View
Ví dụ dưới đây cho tất cả chúng ta thấy lớp Mã Sản Phẩm được đại diện thay mặt bởi 2 class là : “ Model ” và “ Book ” .

include_once("model/Book.php");

class Model {
	public function getBookList()
	{
		// Dưới đây mình gắn cứng 1 array để mô phỏng dữ liệu trong 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)
	{
		//Gọi function getBooklist để lấy dữ liệu cần thiết
                //Trong thực tế ở đây bạn sẽ dùng câu truy vấn select vào trong database
		$allBooks = $this->getBookList();
		return $allBooks[$title];
	}
	
	
}

Class Book trong file Book.php

Gợi ý : Bạn là người mới và muốn khám phá về Bitcoin nhưng không biết khởi đầu từ đâu ? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé !

class Book {
	public $title;
	public $author;
	public $description;
	
	public function __construct($title, $author, $description) {  
            $this->title = $title;
	    $this->author = $author;
	    $this->description = $description;
         } 
}

c. View

View chịu nghĩa vụ và trách nhiệm định đạng lại tài liệu được truyền ra từ Model. Dữ liệu được truyền ra hoàn toàn có thể có nhiều định dạng khác nhau tùy vào cách người lập trình giải quyết và xử lý như là xml, json, array, ..
Lưu ý là bạn đừng nên nhập nhằng, khó hiểu giữa view và template. Khi nhận được tài liệu với định dạng nhất định từ mạng lưới hệ thống, liên tục view sẽ làm thao tác quy đổi tài liệu thành một cấu trúc html cho người dùng thấy được. Thông thường 1 controller sẽ chỉ định gửi tài liệu đến 1 view đơn cử. Chẳng hạn với việc làm hiển thị thông tin tài khoản người dùng, thì Controller “ display account ” sẽ gọi đến lớp view “ display account ”. Tại đây, lớp view sẽ sử dụng 1 template có sẵn trong mạng lưới hệ thống để render ra những trang html. Mẫu template có sẵn này xử dụng lại những phần cố định và thắt chặt của website như header, footer, menu, ..
Đoạn code dưới đây cho ta 2 view dùng để hiển thị 1 quyển sách và nhiều quyền sách
viewbook.php






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

booklist.php






	 $book)
			{
				echo '';
			}

		?>
	
TitleAuthorDescription
'.$book->title.''.$book->author.''.$book->description.'

Các ví dụ trên của mình chính là cái nền cơ bản, cách hoạt động giải trí giống với những MVC Framework phổ cập lúc bấy giờ như CI, Zend, … Hy vọng qua bài viết này, những bạn có cái nhìn rõ ràng hơn về mô hình MVC và học những framework nhanh hơn. Kết thúc bài viết mình sẽ liệt kê một số ít ưu điểm của MVC :

  • Model và View tách biệt, nên ứng dụng linh hoạt hơn, dễ bảo trì hơn các website truyền thống, một nùi code trong 1 file 🙂
  • Model và View có thể coi là tách biệt, độc lập. Có thể 1 máy chủ A chỉ làm nhiệm vụ xử lý Model, back-end, một máy chủ B chỉ làm nhiệm vụ xử lý giao diện, front-end,.

Bạn vẫn còn vướng mắc về bài viết, để lại comment bên dưới nhé. Thân ái và quyết thắng !

Tôi Là Hoàng Hiếu

Mình là Hiếu.
Người sáng lập ra blog Kungfu PHP chia sẻ mọi thứ về tiền điện tử, mmo, lập trình,…
Một câu nói mà mình rất thích đó là “Cuộc đời chỉ có một, vì thế hãy làm những gì khiến bạn hạnh phúc và ở bên người khiến bạn luôn mỉm cười”.
Hy vọng nơi đây là mái nhà chung để chúng ta có thể trao đổi, cùng nhau phát triển.

► Nếu bạn thấy bài viết bạn đang đọc có ích, hãy mời mình một ly cafe nhé : https://final-blade.com/donate