MÔ HÌNH MVC TRONG PHP
NGUYỄN HỮU THỂ
03/01/2021 1
Nội dung
❑Mô hình MVC ❑Ưu và nhược điểm của mô hình MVC ❑Phát triển ứng dụng Web theo mô hình MVC ❑Tài liệu tham khảo
2
03/01/2021
1. Model View Controller (MVC)
− MVC: một kiến trúc phần mềm (hay mô hình thiết kế) được sử
1. Mô hình MVC
dụng trong kỹ thuật phần mềm.
2. Ưu/nhược điểm
− Tách một ứng dụng web ra làm 3 thành phần đảm nhiệm chức
3. Ứng dụng MVC (1)
năng tách biệt, thuận tiện cho việc xử lý và bảo trì.
4. Ứng dụng MVC (2)
3
3 3
1. Model View Controller (MVC)
− Model: Quản lý dữ liệu, lưu trữ và truy xuất các dữ liệu từ cơ sở
1. Mô hình MVC
dữ liệu, các logic xử lý.
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
− View: Hiển thị dữ liệu đã được truy xuất từ model. − Controller: Trung gian, giúp cho model và view tương tác với
nhau. • Controller nhận request từ client. • Gọi các model để thực hiện các yêu cầu và gửi ra View. • View sẽ format lại data từ controller gửi ra và trình bày dữ liệu
(HTML).
4. Ứng dụng MVC (2)
4
4 4
2. Ưu và nhược điểm của MVC
1. Mô hình MVC
❖ Ưu điểm: − Thể hiện tính chuyên nghiệp trong lập trình, phân tích
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
thiết kế.
− Phát triển ứng dụng theo cấu trúc đơn giản, dễ nâng
cấp, bảo trì, triển khai. => Sử dụng phổ biến nhất trong các PHP Framework
❖ Nhược điểm: − Tốn nhiều thời gian để xây dựng thư viện, cấu trúc. − Yêu cầu về chuyên môn khá cao, có kiến thức vững về
các mô hình chuẩn.
4. Ứng dụng MVC (2)
5
5 5
3. Thiết kế ứng dụng Web theo mô hình MVC
− Cấu trúc ứng dụng MVC:
1. Mô hình MVC
2. Ưu/nhược điểm
3.1 Trang chủ
3.2 Controller
3.3 Model
3.4 View
3. Ứng dụng MVC (1)
4. Ứng dụng MVC (2)
6
6 6
index.php
1. Mô hình MVC
− Controller: nơi đầu tiên nhận các yêu cầu (request). − Controller được gọi từ file index.php.
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
3.1 Trang chủ
index.php
3.2 Controller
3.3 Model
3.4 View
$controller = new Controller(); $controller->invoke();
4. Ứng dụng MVC (2)
7
7 7
Controller.php
1. Mô hình MVC
private $modelStudent; public function __construct(){
$this->modelStudent = new StudentModel();
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
} public function invoke(){
3.1 Trang chủ
if (!isset($_GET['id'])){
3.2 Controller
3.3 Model
$students = $this->modelStudent->getStudentList(); include 'view/student-list.php';
3.4 View
4. Ứng dụng MVC (2)
} else{
$student = $this->modelStudent->getStudent($_GET['id']); include 'view/student.php';
}
}
}
▪ Contructor: gọi và khởi tạo lớp Model. ▪ Invoke: quyết định data nào được phép trả ra từ model => gọi model
8
để lấy dữ liệu => gửi dữ liệu ra view.
8 8
MVC Sequence Diagram
1. Mô hình MVC
2. Ưu/nhược điểm
3.1 Trang chủ
3.2 Controller
3.3 Model
3.4 View
3. Ứng dụng MVC (1)
4. Ứng dụng MVC (2)
9
9 9
StudentModel.php
include_once("model/Student.php"); class StudentModel {
public function getStudentList(){
return array(
1. Mô hình MVC
2. Ưu/nhược điểm
3.1 Trang chủ
3.2 Controller
3.3 Model
"01" => new Student("01", "Nguyễn Đình A", "15-06-2000","Nam", "Vĩnh Long"), "02" => new Student("02", "Nguyễn Đình B", "16-06-2000","Nam", "Vĩnh Long"), "03" => new Student("03", "Nguyễn Văn C", "17-06-2000","Nam", "Cần Thơ"), "04" => new Student("04", "Nguyễn Văn D", "18-06-2000","Nam", "Cần Thơ") );
3.4 View
}
3. Ứng dụng MVC (1)
public function getStudent($id){
$allBooks = $this->getStudentList(); return $allBooks[$id];
}
}
− Model đại diện cho dữ liệu và logic của ứng dụng, thường hay gọi là
business logic.
4. Ứng dụng MVC (2)
10
10
class Student {
Student.php
1. Mô hình MVC
2. Ưu/nhược điểm
private $id; private $name; private $birthday; private $gender; private $address;
3.1 Trang chủ
3. Ứng dụng MVC (1)
public function getID(){ return $this->id;
3.2 Controller
3.3 Model
} public function getName(){ return $this->name;
3.4 View
4. Ứng dụng MVC (2)
public function __construct($id, $name, $birthday, $gender, $address){
} public function getBirthday(){ return $this->birthday;
} public function getGender(){ return $this->gender;
$this->id = $id; $this->name = $name; $this->birthday = $birthday; $this->gender = $gender; $this->address = $address;
}
} public function getAddress(){ return $this->address;
}
}
11
11
View
1. Mô hình MVC
− View: định đạng lại dữ liệu nhận được từ model. − Trình bày nhiều dạng dữ liệu (xml, json, array,…).
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
view/student.php
3.1 Trang chủ
3.2 Controller
3.3 Model
3.4 View
Mã số | getID()?> |
Họ và tên | getName()?> |
Ngày sinh | getBirthday()?> |
Giới tính | getGender()?> |
Địa chỉ | getAddress()?> |
4. Ứng dụng MVC (2)
12
12 12
view/student-list.php
1. Mô hình MVC
2. Ưu/nhược điểm
3.1 Trang chủ
Mã số | Họ và tên | Ngày sinh | Địa chỉ |
---|---|---|---|
'.$student->getID().' | '.$student->getName().' | '.$student->getBirthday().' | '.$student->getAddress().' |
4. Ứng dụng MVC (2)
13
13 13
Demo
http://localhost/MVC/mvc-student/index.php
1. Mô hình MVC
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
View: student-list.php
3.1 Trang chủ
3.2 Controller
3.3 Model
3.4 View
4. Ứng dụng MVC (2)
View: student.php
14
14 14
ỨNG DỤNG MVC CÓ DATABASE
1. Mô hình MVC
❑ Cấu trúc ứng dụng 1:
2. Ưu/nhược điểm
3. Ứng dụng MVC (1)
❑ Cấu trúc ứng dụng 2: bổ sung database
4.1 Trang chủ
4.2 Controller
4.3 Model
4.4 View
✓ File Database.php có thể
lưu ở 1 thưc mục khác, VD: library
4. Ứng dụng MVC (2)
15
15 15
Bổ sung lớp Database.php Chứa phương thức kết nối/ hủy kết nối đến database
class Database {
private $connection;
public function getConnection() { if (! ($this->connection)) {
$this->connection = mysqli_connect ( 'localhost', 'root', '', 'mvc_student' ) or die ( 'Không thể kết nối CSDL' ); mysqli_set_charset ( $this->connection, 'utf8' );
} return $this->connection;
}
public function closeConnection() {
if ($this->connection) {
mysqli_close ( $this->connection );
}
}
}
16
16 16
❑ Ứng dụng 1:
❑ Ứng dụng 2:
index.php
index.php
$controller = new Controller(); $controller->invoke();
$controller = new Controller(); $controller->invoke();
17
17 17
❑ Ứng dụng 1:
❑ Ứng dụng 2:
Controller.php
Controller.php
include_once("model/StudentModel.php");
class Controller {
include_once("model/Database.php"); include_once("model/StudentModel.php"); class Controller {
private $modelStudent; public function __construct(){
private $modelStudent; public function __construct(){
$this->modelStudent = new StudentModel((new Database())->getConnection());
$this->modelStudent = new StudentModel();
} public function invoke(){
} public function invoke(){
if (!isset($_GET['id'])){
if (!isset($_GET['id'])){
$students = $this->modelStudent- >getStudentList(); include 'view/student-list.php';
$students = $this->modelStudent- >getStudentList(); include 'view/student-list.php';
} else{
} else{
$student = $this->modelStudent- >getStudent($_GET['id']); include 'view/student.php';
$student = $this->modelStudent- >getStudent($_GET['id']); include 'view/student.php';
}
}
}
}
}
}
18
18
❑ Ứng dụng 1: StudentModel.php
❑ Ứng dụng 2: StudentModel.php
include_once("model/Student.php"); class StudentModel {
public function getStudentList(){
include_once("model/Student.php"); class StudentModel {
return array(
private $connection; public function __construct($db) {
$this->connection = $db; "01" => new Student("01", "Nguyễn Đình
} function getStudentList() {
A", "15-06-2000","Nam", "Vĩnh Long"),
"02" => new Student("02", "Nguyễn Đình
B", "16-06-2000","Nam", "Vĩnh Long"),
"03" => new Student("03", "Nguyễn Văn C",
"17-06-2000","Nam", "Cần Thơ"),
"04" => new Student("04", "Nguyễn Văn $sql = "Select * from Student"; $result = mysqli_query ( $this->connection, $sql ); while ( $row = mysqli_fetch_array ( $result ) ) { $data [] = new Student($row["id"], $row["name"],$row["birthday"],$row["gender"],$row["address"]); D", "18-06-2000","Nam", "Cần Thơ")
} return $data;
);
} function getStudent($id) {
public function getStudent($id){
}
}
}
$sql = "Select * from Student where id = $id"; $result = mysqli_query ( $this->connection, $sql ); if (mysqli_num_rows ( $result ) > 0) { $allBooks = $this->getStudentList(); return $allBooks[$id];
} return null;
}
}
$row = mysqli_fetch_assoc ( $result ); $student = new Student($row["id"], $row["name"],$row["birthday"],$row["gender"],$row["address"]); return $student;
19
❑ Ứng dụng 1: Student.php
❑ Ứng dụng 2: Student.php
class Student {
class Student {
private $id; private $name; private $birthday; private $gender; private $address; public function getID(){ return $this->id;
private $id; private $name; private $birthday; private $gender; private $address; public function getID(){ return $this->id;
} public function getName(){ return $this->name;
} public function getName(){ return $this->name;
} public function getBirthday(){ return $this->birthday;
} public function getBirthday(){ return $this->birthday;
} public function getGender(){ return $this->gender;
} public function getGender(){ return $this->gender;
} public function getAddress(){ return $this->address;
} public function getAddress(){ return $this->address;
} public function __construct($id, $name, $birthday, $gender, $address){
} public function __construct($id, $name, $birthday, $gender, $address){
$this->id = $id; $this->name = $name; $this->birthday = $birthday; $this->gender = $gender; $this->address = $address;
$this->id = $id; $this->name = $name; $this->birthday = $birthday; $this->gender = $gender; $this->address = $address;
}
}
20
}
}
20
❑ Ứng dụng 1:
❑ Ứng dụng 2:
view/student.php
view/student.php
Mã số | getID()?> | ||||||||||
Họ và tên | getName()?> | ||||||||||
Ngày sinh | getBirthday()))?> |
Mã số | getID()?> |
Họ và tên | getName()?> |
Ngày sinh | getBirthday()?> |
Giới tính | getGender()?> |
Địa chỉ | getAddress()?> |
21
21 21
❑ Ứng dụng 2:
❑ Ứng dụng 1: view/student-list.php
view/student-list.php
Mã số | Họ và tên | Ngày sinh | Địa chỉ | Mã số | Họ và tên | Ngày sinh | Địa chỉ | $student){ echo ‘
---|---|---|---|---|---|---|---|
'.$student- | '.$student- >getID().' | '.$student->getName().' | '.$student->getBirthday().' | '.$student->getAddress().' | '.$student->getName().' | '.date('d-m-Y', strtotime($student->getBirthday())).' | '.$student->getAddress().' |
22
22 22
Demo
http://localhost/MVC/mvc-student-datebase/index.php
View: student-list.php
View: student.php
23 23
Tài liệu tham khảo
1.
http://php-html.net/tutorials/model-view-controller-in-php, 5/6/2018.
1. Mô hình MVC
2.
https://whatis.techtarget.com/definition/model-view-controller-MVC, 5/6/2018
2. Ưu/nhược điểm
3.
https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm
3. Ứng dụng MVC (1)
4.
https://laravel.com/docs, 6/6/2018.
5.
https://www.w3schools.com/css/css_table.asp, 6/6/2018.
4. Ứng dụng MVC (2)
Tài liệu tham khảo
24
24 24