Ví dụ về mô hình MVC trong PHP

Mô hình MVC là mô hình được sử dụng rất rộng rãi trong việc tiến triển áp dụng website ngày nay. Trong nội dung này, thông qua chương trình minh họa, mình sẽ giải thích mô hình MVC một cách dễ dàng nhất để giúp các bạn có một cái nhìn dễ nhất về mô hình trên.

1. Giới thiệu

Mô hình MVC là mô hình gồm 3 lớp: Model, Lượt xem, Controller. Rõ ràng và cụ thể như sau:

  • Model: có nhiệm vụ quản lí dữ liệu: giao tiếp với CSDL, chịu nhiệm vụ lưu trữ hoặc truy vấn dữ liệu.
  • Lượt xem: là giao diện của áp dụng, chịu nhiệm vụ hiển thị dữ liệu của áp dụng.
  • Controller: đóng vai trò quản lí & điều phối luồng hoạt động của áp dụng. Controller sẽ nhận request từ client, điều phối các Model & Lượt xem để có thể cho ra output phù hợp & trả kết quả về cho người dung.

Ta có thể mô tả lại hoạt động của mô hình MVC thông qua sơ đồ sau:

![](/content/images/2021/07/mvc_03.jpeg)

2. Chương trình minh hoạ

![](/content/images/2021/07/mvc_03.jpeg)

Áp dụng minh hoạ có chức năng sau:

![](/content/images/2021/07/Screen-Shot-2021-07-14-at-22.52.17.png)

Tổ chức source code

Trước tiên ta cần phải có một điểm truy cập ban đầu để vào được áp dụng, file `index.php` tiếp nhận trách nhiệm này. File này ban đầu này sẽ có vai trò cho người dùng truy cập vào tính năng mong đợi(controller tương ứng), ở giai đoạn này để dễ dàng thì ta chỉ seting 1 tính năng là `manage Student.`

XEM THÊM  [MySQL 11] ORDER BY in MySQL: DESC & ASC
XEM THÊM  Hàm ngày tháng trong Excel

![](/content/images/2021/07/Screen-Shot-2021-07-14-at-22.52.17.png)Trước tiên ta cần phải có một điểm truy cập ban đầu để vào được áp dụng, file `index.php` tiếp nhận trách nhiệm này. File này ban đầu này sẽ có vai trò cho người dùng truy cập vào tính năng mong đợi(controller tương ứng), ở giai đoạn này để dễ dàng thì ta chỉ seting 1 tính năng là `manage Student.`

Trong ví dụ tới này, mình sẽ tổ chức source code như hình dưới:

![](/content/images/2021/07/Screen-Shot-2021-07-14-at-22.57.06.png)

Controller

![](/content/images/2021/07/Screen-Shot-2021-07-14-at-22.57.06.png)

Đây là nơi điều phối của áp dụng: nhận request từ client, nghiên cứu request, gọi Model để lấy data & Lượt xem để tổ chức hiển thị data.

Trong ví dụ là tính năng quản lí học viên được điều phối bởi controller C_Student.php. Có 2 tính năng con: Hiển thị danh mục học viên(get danh mục) & hiển thị thông tin học viên(get detail information) nên controller sẽ phân biệt chức năng bằng cách kiểm soát tham số đầu vào là studentId. Tuỳ trường hợp mà controller sẽ gọi lượt xem tương ứng.

<?php
include_once("../Model/M_Student.php");

class  Ctrl_Student
{
	public function invoke(){
		if(isset($_GET['studentId']))
		{
			$modelStudent =  new Model_Student();
			$student = $modelStudent->getStudentDetail($_GET['studentId']);

			include_once("../View/StudentDetail.html");
		}
		else
		{
			$modelStudent =  new Model_Student();
			$studentList = $modelStudent->getAllStudent();

			include_once("../View/StudentList.html");
		}
	}
};

$C_Student = new Ctrl_Student();
$C_Student->invoke();

Model & Entity class

Bổ phận chính của Model là thao tác với database để truy vấn dữ liệu. Các thao tác với database phải được đặt hết ở Model.

Không những thế tại Model còn chứa các Entity class(lớp thực thể ) là các lớp để mô tả đối tượng. Ở ví dụ, thư mục Model: Model_Student & Entity_Student.

  • Entity_Student chính là 1 thực thể mô tả về 1 student trong thực tiễn (tên, tuổi, trường…).
<?php

class Entity_Student
{
	public $id;
	public $name;
	public $age;
	public $university;

	public function __construct($_id, $_name, $_age, $_university)
	{
		$this->id = $_id;
		$this->name = $_name;
		$this->age = $_age;
		$this->university = $_university;
	}
}

?>
  • Model_Student sẽ sử dụng lớp thực thể này để cấu tạo dữ liệu sẽ lấy từ Database. Lớp Model_Student đóng vai trò giao tiếp với DataBase.
<?php
include_once("E_Student.php");

class Model_Student
{
	public function __construct()
	{}

	public function getAllStudent()
	{
		// Instance of load data from DB
		return array(
			"1" => new Entity_Student(1, "Nguyen Van A", 22, "University FPT"),
			"2" => new Entity_Student(2, "Tran Van B", 23, "University of Science"),
			"3" => new Entity_Student(3, "Pham Thi C", 21, "University of Technology"),
		);
	}

	public function getStudentDetail($studentId)
	{
		$allStudent = $this->getAllStudent();
		return $allStudent[$studentId];
	}
}

?>

Lượt xem

Lượt xem dùng để hiển thị dữ liệu lên cho người dùng, ta có 2 chức năng nhỏ là: danh mục học viên & cụ thể học viên tương ứng với 2 lượt xem khác nhau. Controller sẽ truyền các biến dữ liệu vào các Lượt xem để chúng có thể hiển thị lên bằng cách nhúng mã PHP vào trong mã HTML.
Tất cả chúng ta có 2 lượt xem để thực hiện việc hiển thị dữ liệu là:

  • Danh mục học viên tương ứng với StudentList.html
<!DOCTYPE htmlvàgt;
<htmlvàgt;

<headvàgt;
	<meta charset="UTF-8"/>
	<titlevàgt;danh mụcvàlt;/titlevàgt;
</headvàgt;

<bodyvàgt;
	<h2vàgt;Danh mục:</h2vàgt;

	<?php

		for($ι = 1; $ι <= sizeof($studentList); $ι++) {
			echo  "<p>" .$ι .". <a href='?studentId=" .$studentList[$i]->id ."'>" .$studentList[$i]->name ."</a></p>";
		}

	?>

	<brvàgt;
	<ρvàgt;<α href="../index.php">Trang chínhvàlt;/avàgt;</ρvàgt;
</bodyvàgt;
</htmlvàgt;
  • Cụ thể học viên tương ứng với file StudentDetail.html
<!DOCTYPE htmlvàgt;
<htmlvàgt;

<headvàgt;
	<meta charset="UTF-8"/>
	<titlevàgt;Studentvàlt;/titlevàgt;
</headvàgt;

<bodyvàgt;
	<h2vàgt;Student:</h2vàgt;

	<?php

		echo  "<p><b>" .$student->name ."</b></p>";
		echo "<p> Age: " .$student->age .", School: " .$student->university .".</p><br>";

	?>

	<ρvàgt;<α href="javascript:history.back()">Backvàlt;/avàgt;</ρvàgt;

</bodyvàgt;
</htmlvàgt;

Việc nhúng mã PHP vào HTML khiến mã nguồn trở nên cầu kỳ & khó kiểm tra, việc này dẫn tới sự sinh ra của các template engine như blade của Laravel hay twig… Các template engine biệt lập mã PHP ra khỏi mã HTML nên sẽ khiến code trở nên rõ ràng và cụ thể hơn nhiều.

XEM THÊM  Số nguyên tố là gì? hướng dẫn cách tìm số nguyên tố nhanh nhất số nguyên tố là gì? hợp số là gì? cách tìm số nguyên tố
XEM THÊM  Giới thiệu bài toán lớp 4 dãy số tự nhiên

So với các áp dụng thuần AJAX, phần Lượt xem có thể được triển khai bởi javascript, dẫn theo việc sử dụng cấu tạo JSON.

Mô hình tuần tự sẽ giúp bạn hình dung luồng hoạt động của một http request trong mô hình MVC:

3. Kết luận

Mô hình MVC là mô hình phổ biến & tiện dụng vị trí thứ nhất trong việc tiến triển áp dụng website, trên đây mình đã trình bày căn bản về mô hình MVC & phương thức của nó hoạt động. Trong các nội dung kế tiếp về chỉ dẫn Laravel Framework, mình cũng sẽ đề cập lại mô hình MVC & các cấu tạo của nó.
([Link bài viết tiếp theo tham khảo tại đây.](http://))

Mô hình MVC là mô hình phổ biến & tiện dụng vị trí thứ nhất trong việc tiến triển áp dụng website, trên đây mình đã trình bày căn bản về mô hình MVC & phương thức của nó hoạt động. Trong các nội dung kế tiếp về chỉ dẫn Laravel Framework, mình cũng sẽ đề cập lại mô hình MVC & các cấu tạo của nó. ([Link bài viết tiếp theo tham khảo tại đây.](http://))

Không những thế bạn cũng có thể xem qua source code chương trình minh họa tại đây.

Xem thêm bài viết thuộc chuyên mục: Kiến thức lập trình

Related Articles

Stay Connected

FansLike
3,051FollowersFollow
SubscribersSubscribe

Latest Articles