Source code dành cho ai cần MVC đi phỏng vấn
2nd Nov 2022Hướng dẫn từng bước set up một project PHP theo mô hình MVC. Bạn có thể sử dụng source này để tiết kiệm thời gian set up cho project của mình.
- Buổi 1: Giới thiệu mô hình MVC https://www.youtube.com/watch?v=CasgqSBvOMY
- Buổi 2: Controllers https://www.youtube.com/watch?v=JJ97y6OviRk
- Buổi 3: Models https://www.youtube.com/watch?v=VCn6yu6eaFs
- Buổi 4: Views https://www.youtube.com/watch?v=5JOgsWOS-CM
- Buổi 5: Kết nối Database https://www.youtube.com/watch?v=guCJ0o2rUZ8
- Buổi 6: Các vấn đề khác (Ajax, Route...) https://www.youtube.com/watch?v=TutBjMexFE4
Khóa học lập trình PHP tại Khoa Phạm: https://khoapham.vn/lap-trinh-php.html
Group học lập trình: https://www.facebook.com/groups/khoaphamonline
Website học lập trình online: http://online.khoapham.vn
Mô hình MVC là mô hình được sử dụng rất rộng rãi trong việc phát triển ứng dụng web ngày nay. Trong bài viết 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 đơn giản 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
, View
, Controller
. Cụ thể như sau:
- Model: có trách nhiệm quản lí dữ liệu: giao tiếp với cơ sở dữ liệu, chịu trách nhiệm lưu trữ hoặc truy vấn dữ liệu.
- View: là giao diện của ứng dụng, chịu trách nhiệm hiển thị dữ liệu của ứng dụng.
- Controller: đóng vai trò quản lí và điều phối luồng hoạt động của ứng dụng. Controller sẽ nhận request từ client, điều phối các Model và View để có thể cho ra output thích hợp và trả kết quả về cho người dung.
Controller
Đây là nơi điều phối của ứng dụng: nhận request từ client, phân tích request, gọi Model để lấy data và View để tổ chức hiển thị data.
Trong ví dụ là chức năng quản lí học sinh được điều phối bởi controller C_Student.php
. Có 2 chức năng con: Hiển thị danh sách học sinh(get list) và hiển thị thông tin học sinh(get detail information) nên controller sẽ phân biệt tính năng bằng cách kiểm tra tham số đầu vào là studentId
. Tuỳ trường hợp mà controller sẽ gọi view 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 và Entity class
Nhiệm vụ 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.
Ngoài ra 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 và Entity_Student.
Entity_Student chính là 1 thực thể mô tả về 1 student trong thực tế (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 trúc dữ liệu sẽ lấy từ Database. Lớp Model_Student đóng vai trò giao tiếp với CSDL.
<?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];
}
}
?>
View
View dùng để hiển thị dữ liệu lên cho người dùng, ta có 2 tính năng nhỏ là: danh sách học sinh
và chi tiết học sinh
tương ứng với 2 view khác nhau. Controller sẽ truyền các biến dữ liệu vào các View để chúng có thể hiển thị lên bằng cách nhúng mã PHP vào trong mã HTML.
Chúng ta có 2 view để thực hiện việc hiển thị dữ liệu là:
Danh sách học sinh tương ứng với StudentList.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>list</title>
</head>
<body>
<h2>List:</h2>
<?php
for($i = 1; $i <= sizeof($studentList); $i++) {
echo "<p>" .$i .". <a href='?studentId=" .$studentList[$i]->id ."'>" .$studentList[$i]->name ."</a></p>";
}
?>
<br>
<p><a href="../index.php">Home page</a></p>
</body>
</html>
Chi tiết học sinh tương ứng với file StudentDetail.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Student</title>
</head>
<body>
<h2>Student:</h2>
<?php
echo "<p><b>" .$student->name ."</b></p>";
echo "<p> Age: " .$student->age .", School: " .$student->university .".</p><br>";
?>
<p><a href="javascript:history.back()">Back</a></p>
</body>
</html>
Việc nhúng mã PHP vào HTML khiến mã nguồn trở nên phức tạp và khó kiểm soát, việc này dẫn tới sự ra đời của các template engine như blade
của Laravel hay twig
... Các template engine tách biệt mã PHP ra khỏi mã HTML nên sẽ khiến code trở nên rõ ràng hơn nhiều.
Đối với các ứng dụng thuần AJAX, phần View có thể được triển khai bởi javascript, kéo theo việc sử dụng cấu trúc 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:
- 76 views
Add new comment