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êngetName()?>
Ngày sinhgetBirthday()?>
Giới tínhgetGender()?>
Đị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ủ

$student){ echo ‘

3.2 Controller

3.3 Model

3.4 View

3. Ứng dụng MVC (1)

'; } ?>
Mã sốHọ và tênNgà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êngetName()?>
Ngày sinh getBirthday()))?>
Mã sốgetID()?>
Họ và têngetName()?>
Ngày sinhgetBirthday()?>
Giới tínhgetGender()?>
Địa chỉgetAddress()?>

Giới tínhgetGender()?> Địa chỉgetAddress()?>

21

21 21

❑ Ứng dụng 2:

❑ Ứng dụng 1: view/student-list.php

view/student-list.php

>getID().'

$student){ echo ‘

'; } ?>
Mã số Họ và tên Ngày sinh Địa chỉ
Mã số Họ và tên Ngày sinh Địa chỉ
'.$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