Bài giảng Phát triển ứng dụng Web: Bài 6 Mô hình MVC trong PHP cung cấp cho người học những kiến thức như: 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.
Trang 1MÔ HÌNH MVC TRONG PHP
NGUYỄN HỮU THỂ
Trang 2Nội dung
2
Trang 31 M odel V iew C ontroller (MVC)
− MVC: một kiến trúc phần mềm (hay mô hình thiết kế) được sử dụng trong kỹ thuật phần mềm.
− 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ì.
1 Mô hình MVC
2.Ưu/nhược điểm
3.Ứng dụng MVC (1)
4.Ứng dụng MVC (2)
Trang 41 M odel V iew C ontroller (MVC)
− Model: Quản lý dữ liệu, lưu trữ và truy xuất các dữ liệu từ cơ sở
dữ liệu, các logic xử lý.
− 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.
Trang 52 Ưu và nhược điểm của MVC
− Thể hiện tính chuyên nghiệp trong lập trình, phân tích
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
− 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ề
Trang 63 Thiết kế ứng dụng Web theo mô hình MVC
Trang 7− Controller: nơi đầu tiên nhận các yêu cầu (request).
− Controller được gọi từ file index.php
Trang 8public function construct(){
$this-> modelStudent = new StudentModel ();
}
Controller.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
để lấy dữ liệu => gửi dữ liệu ra view.
Trang 10"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ơ" ) );
Trang 11return $this-> name ;
}
return $this-> birthday ;
}
return $this-> gender ;
}
return $this-> address ;
}
public function construct($id, $name,
$birthday, $gender, $address){
$this-> id = $id;
$this-> name = $name;
$this-> birthday = $birthday;
$this-> gender = $gender;
$this-> address = $address;
} }
Trang 12− 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,…).
12
< table >
< tr >< td > Mã số </ td >< td > <?php echo $student->getID() ?> </ td ></ tr >
< tr >< td > Họ và tên </ td >< td > <?php echo $student->getName() ?> </ td ></ tr >
< tr >< td > Ngày sinh </ td >< td > <?php echo $student->getBirthday()?> </ td ></ tr >
< tr >< td > Giới tính </ td >< td > <?php echo $student->getGender() ?> </ td ></ tr >
< tr >< td > Địa chỉ </ td >< td > <?php echo $student->getAddress() ?> </ td ></ tr >
Trang 16$this->connection = mysqli_connect ( 'localhost' , 'root' , '' ,
'mvc_student' ) or die ( 'Không thể kết nối CSDL' );
mysqli_set_charset ( $this-> connection , 'utf8' );
}
Chứa phương thức kết nối/ hủy kết nối đến database
Trang 1818 18
include_once ("model/StudentModel.php");
class Controller {
private $modelStudent;
public function construct(){
$this-> modelStudent = new StudentModel ();
}
public function invoke(){
if (!isset( $_GET ['id'])){
$students = $this-> modelStudent
->getStudentList();
include 'view/student-list.php';
}
else {
$student = $this-> modelStudent
->getStudent( $_GET ['id']);
include 'view/student.php';
} }
public function construct(){
$this-> modelStudent = new StudentModel ( (new Database())->getConnection() );
}
public function invoke(){
if (!isset( $_GET [ 'id' ])){
$students = $this-> modelStudent
->getStudentList();
include 'view/student-list.php';
}
else {
$student = $this-> modelStudent
->getStudent( $_GET ['id']);
include 'view/student.php';
} }
}
Controller.php
Trang 19$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"]);
}return $data;
}functiongetStudent($id) {
$sql = "Select * from Student where id = $id";
$result = mysqli_query ( $this->connection, $sql );
if (mysqli_num_rows ( $result ) > 0) {
$row = mysqli_fetch_assoc ( $result );
$student = new Student($row["id"],
$row["name"],$row["birthday"],$row["gender"],$row["address"]);
return $student;
}return null;
}
Trang 20public function getName(){
return $this-> name ; }
public function getBirthday(){
return $this-> birthday ; }
public function getGender(){
return $this-> gender ; }
public function getAddress(){
return $this-> address ; }
public function construct($id, $name, $birthday, $gender, $address){
public function getName(){
return $this-> name ; }
public function getBirthday(){
return $this-> birthday ; }
public function getGender(){
return $this-> gender ; }
public function getAddress(){
return $this-> address ; }
public function construct($id, $name, $birthday, $gender, $address){
}
Trang 21< table >
< tr >< td > Mã số </ td >< td > <?phpecho $student->getID() ?></ td ></ tr >
< tr >< td > Họ và tên </ td >< td > <?phpecho $student->getName() ?></ td ></ tr >
< tr >< td > Ngày sinh </ td >< td > <?php echo $student->getBirthday() ?></ td ></ tr >
< tr >< td > Giới tính </ td >< td > <?phpecho $student->getGender() ?></ td ></ tr >
< tr >< td > Địa chỉ </ td >< td > <?phpecho $student->getAddress() ?></ td ></ tr >
< tr >< td > Giới tính </ td >< td > <?phpecho $student->getGender() ?></ td ></ tr >
< tr >< td > Địa chỉ </ td >< td > <?phpecho $student->getAddress() ?></ td ></ tr >
</ table >
view/student.php
Trang 22</table>
Trang 23View: student-list.php
View: student.php
http://localhost/MVC/mvc-student-datebase/index.php
Trang 24Tài liệu tham khảo