TRUNG TÂ M TIN HỌC
ĐẠI HỌC KHOA HỌC TỰ NHIÊN-TP.HCM
LẬP TRÌNH PHP NÂNG CAO
LẬP
TRÌNH
PHP
NÂNG
CAO
MÔ HÌNH MVC
+ ZF2
MÔ
HÌNH
MVC
+
ZF2
1
TRUNG TÂ M TIN HỌC
ĐẠI HỌC KHOA HỌC TỰ NHIÊN-TP.HCM
Bài
1: Mô hình MVC
Bài
1:
Mô
hình
MVC
1. Lịch sử MVC
2.
Giới
thiệu
mô
hình
MVC
2.
Giới
thiệu
mô
hình
MVC
3. Ưu điểmvànhược điểmcủamôhình
MVC
MVC
4. L
ý
do nên làm vi
ệ
ctheomôhìnhMVC
ý
ệ
2
Bài 1: Mô hình MVC
11
Lị hLị h
ửử
MVCMVC
1
.
1
.
Lị
c
hLị
c
h
s
ử
s
ử
MVCMVC
Được
đưa
ra
bởi
các
nhà
nghiên
cứu
tại
phòng
thí
Được
đưa
ra
bởi
các
nhà
nghiên
cứu
tại
phòng
thí
nghiệm Xerox PARC Palo Alto, dựa trên Ngôn ngữ lập
trình Smalltalk - lậ
p
trình theo hướn
g
đốitượn
g
và
g
iao
p
g
g
g
điện đồ họa GUI, công bố cuốinhững năm 70 đầu
những năm 80.
ế
ế
ấ
ề
Th
ế
hệ ti
ế
p theo củaMVC xu
ấ
thiện cùng vớihệđi
ề
u
hành NeXT và các phầnmềmcủa nó.
Kiế tú à à à đ hát t iể àh à thiệ
Kiế
n
t
r
ú
c n
à
y ng
à
y c
à
ng
đ
ược p
hát
t
r
iể
n v
à
h
o
à
n
thiệ
n
nhằm giải quyết các vấn đề phát sinh cũng như các giải
pháp cho quá trình phát triểnphầnmềm
Vì
vậy
sau
đó
pháp
cho
quá
trình
phát
triển
phần
mềm
.
Vì
vậy
sau
đó
,
lầnlượt các MVC framework ra đờidựatrênmôhình
MVC như: CodeI
g
nite
r
,
Zend…
3
g
,
Bài 1: Mô hình MVC
22
GiớiGiới
thiệthiệ
ôô
hì hhì h
MVCMVC
2
.
2
.
GiớiGiới
thiệ
u
thiệ
um
ô
m
ô
hì
n
hhì
n
h
MVCMVC
MVC
(Model
View
Controller):
là
một
MVC
(Model
–
View
-
Controller):
là
một
design pattern, theo hướng đốitượng, cho
ể
ỏ
ủ
phép developer có th
ể
chia nh
ỏ
code c
ủ
a
mình ra thành 3
p
hần:
p
– Model: duy trì dữ liệu và các business rule
–
View:
hiển
thị
dữ
liệu
và
các
thành
phần
trong
–
View:
hiển
thị
dữ
liệu
và
các
thành
phần
trong
giao diệnngười dùng
Controller
:
điều
khiển
các
sự
kiện
của
người
–
Controller
:
điều
khiển
các
sự
kiện
của
người
dùng có ảnh hưởng đến Model và View
4
Bài 1: Mô hình MVC
22
GiớiGiới
thiệthiệ
ôô
hì hhì h
MVCMVC
2
.
2
.
GiớiGiới
thiệ
u
thiệ
um
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Người dùng tương tác
ằ
(b
ằ
ng cách click vào
link hoặc submit
form…)
controller sẽđiều
khiểnhoạt động này
và đưarahànhđộng
thích hợp (thao tác
tới model và cập
hật
i)
5
n
hật
v
i
ew
)
Bài 1: Mô hình MVC
22
GiớiGiới
thiệthiệ
ôô
hì hhì h
MVCMVC
2
.
2
.
GiớiGiới
thiệ
u
thiệ
um
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Trong
đó
:
Trong
đó
:
– Controller: có thể gửiyêucầu đến View liên kếtcủa
nó
để
thay
đổi
hiển
thị
trên
View,
cũng
có
thể
gửi
yêu
nó
để
thay
đổi
hiển
thị
trên
View,
cũng
có
thể
gửi
yêu
cầu đến model để cậpnhậttrạng thái của model.
–
Model: thôn
g
báo đến các View và Controller có liên
g
quan khi có thay đổitrạng thái. Thông báo này cho
phép các View tạo ra các hiểnthịđượccậpnhậtvà
h
hé
á
Ctll
th
đổi
á
d
c
h
op
hé
pc
á
c
C
on
t
ro
ll
er
th
ay
đổi
c
á
c comman
d
– View: yêu cầu Model gửi các thông tin mà nó cần để
tạo
ra
các
hiển
thị
trên
View
tạo
ra
các
hiển
thị
trên
View
.
6
Bài 1: Mô hình MVC
33
ƯƯ
điểđiể
àà
hh
điểđiể
ủủ
ôô
hì hhì h
MVCMVC
3
.
3
.
Ư
u
Ư
u
điể
m
điể
mv
à
v
à
n
h
ượcn
h
ược
điể
m
điể
mc
ủ
ac
ủ
am
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Ưu
điểm
Ưu
điểm
– Phát triểnphầnmềm: chuyên nghiệp hóa, có thể chia
công việc cho nhiều nhóm chuyên môn khác nhau: nhóm
thiếtkế, nhóm lập trình, nhóm tổ chức database Giúp
phát triển ứng dụng nhanh, đơngiản, dễ nâng cấp.
Bảo
trì
Với
các
lớp
đợc
phân
chia
các
thành
phần
của
–
Bảo
trì
:
Với
các
lớp
đ
ư
ợc
phân
chia
,
các
thành
phần
của
mộthệ thống dễđược thay đổi, nhưng sự thay đổicóthể
đư
ợ
ccôl
ập
tron
g
từn
g
lớ
p
, ho
ặ
cchỉảnh hưởn
g
đếnlớ
p
ợ
ập
g
g
p
ặ
g
p
ngay gầnkề của nó, chứ không làm ảnh hưởng cả
chương trình.
Mở
ộ
Việ
thê
hứ
ă
à
h
từ
lớ
ẽ
dễ
–
Mở
r
ộ
ng:
Việ
c
thê
mc
hứ
cn
ă
ng v
à
oc
h
o
từ
ng
lớ
ps
ẽ
dễ
dàng hơn là phân chia theo cách khác.
7
Bài 1: Mô hình MVC
33
ƯƯ
điểđiể
àà
hh
điểđiể
ủủ
ôô
hì hhì h
MVCMVC
3
.
3
.
Ư
u
Ư
u
điể
m
điể
mv
à
v
à
n
h
ượcn
h
ược
điể
m
điể
mc
ủ
ac
ủ
am
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Nhược
điểm
Nhược
điểm
– Thích hợpvớidự án vừavàlớncònđốivới
ỏ
dự án nh
ỏ
việcápdụng mô hình MVC sẽ gây
cồng kềnh, tốnthời gian trong quá trình phát
ể
tri
ể
n.
– Tốnthời gian trung chuyểndữ liệugiữacác
lớp
8
Bài 1: Mô hình MVC
44
LýLý
dd
êê
làlà
iệiệ
thth
ôô
hì hhì h
MVCMVC
4
.
4
.
LýLý
d
o
d
o n
ê
nn
ê
n
là
m
là
mv
iệ
cv
iệ
c
th
eo
th
eo m
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Vì
mô
hình
MVC
đã
chia
ứng
dụng
thành
Vì
mô
hình
MVC
đã
chia
ứng
dụng
thành
M, V và C nên developer có thể tạora
ề
ề
nhi
ề
u view và nhi
ề
u cotrolle
r
cho các
model mà khôn
g
p
hải đốimặtvớiviệc
g
p
thay đổi trong thiếtkế model.
=>
Giúp
cho
việc
duy
trì
di
chuyển
và
tổ
=>
Giúp
cho
việc
duy
trì
,
di
chuyển
và
tổ
chức ứng dụng dễ dàng hơn.
9
Bài 1: Mô hình MVC
44
LýLý
dd
êê
làlà
iệiệ
thth
ôô
hì hhì h
MVCMVC
4
.
4
.
LýLý
d
o
d
o n
ê
nn
ê
n
là
m
là
mv
iệ
cv
iệ
c
th
eo
th
eo m
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Đối
với
những
người
mới
thì
việc
xây
Đối
với
những
người
mới
thì
việc
xây
dựng ứng dụng dựatrênmôhìnhMVC
phứctạp và lãng phí vì công việc này như
là xâ
y
dựn
g
mộtdự án lớn, tu
y
nhiên “bí
y
g
y
mật” của MVC pattern không nằm ở chỗ
viết
code
mà
ở
chỗ
duy
trì
nó
viết
code
mà
ở
chỗ
duy
trì
nó
.
Cho phép sửa đổi code mà không ảnh
h ở
hiề
đế
á
thà h
hầ
khá
h
ư
ở
ng n
hiề
u
đế
nc
á
c
thà
n
h
p
hầ
n
khá
c.
10
Bài 1: Mô hình MVC
44
LýLý
dd
êê
làlà
iệiệ
thth
ôô
hì hhì h
MVCMVC
4
.
4
.
LýLý
d
o
d
o n
ê
nn
ê
n
là
m
là
mv
iệ
cv
iệ
c
th
eo
th
eo m
ô
m
ô
hì
n
hhì
n
h
MVCMVC
Cho
phép
việc
làm
việc
nhóm
trở
nên
dễ
Cho
phép
việc
làm
việc
nhóm
trở
nên
dễ
dàng hơn vì nhóm nào sẽ làm việccủa
ế
ủ
nhóm đódựatrênth
ế
mạnh c
ủ
a mình.
–
Nhóm View Team sẽ ch
ị
u trách nhi
ệ
mvề vi
ệ
c
ị
ệ
ệ
thựchiện các View
–
Nhóm
Model Team
sẽ
lo
về
mặt
dữ
liệu
Nhóm
Model
Team
sẽ
lo
về
mặt
dữ
liệu
– Nhóm Controller Team sẽ có cái nhìn tổng thể
về
các
luồng
của
ứng
dụng
quản
lý
các
yêu
về
các
luồng
của
ứng
dụng
,
quản
lý
các
yêu
cầu, làm việcvới các model và lựachọnView
hiển
thị
cho
khách
hàng
hiển
thị
cho
khách
hàng
.
11
Bài 1: Mô hình MVC
12
TRUNG TÂ M TIN HỌC
ĐẠI HỌC KHOA HỌC TỰ NHIÊN-TP.HCM
LẬP TRÌNH PHP NÂNG CAO
LẬP
TRÌNH
PHP
NÂNG
CAO
MÔ HÌNH MVC
+ZEND
MÔ
HÌNH
MVC
+
ZEND
FRAMEWORK
FRAMEWORK
1
TRUNG TÂ M TIN HỌC
ĐẠI HỌC KHOA HỌC TỰ NHIÊN-TP.HCM
Bài 2: Xây dựng ứng dụng
theo mô hình MVC
1.
X
ây dựng Model
2.
Xây
dựng
Controller
2.
Xây
dựng
Controller
3. Xây dựng View
ầ
4.
X
ây dựng ứng dụng đ
ầ
utiêntheomô
hình MVC
2
Bài 2: Xây dựng ứng dụng theo mô hình MVC
MôMô
hì hhì h
MVCMVC
MôMô
hì
n
hhì
n
h
MVCMVC
3
Bài 2: Xây dựng ứng dụng theo mô hình MVC
11
XâXâ
dd
MdlMdl
1
.
1
.
Xâ
y
Xâ
y
d
ựng
d
ựng
M
o
d
e
lM
o
d
e
l
Thường
thì
nên
xây
dựng
Model
trước
bởi
vì
Model
Thường
thì
nên
xây
dựng
Model
trước
bởi
vì
Model
phụcvụ như là nềntảng dữ liệu cho toàn bộứng dụng
web;
Nhiềuchứcnăng của Controller phụ thuộc vào model.
Tron
g
Model sẽ có các
p
hươn
g
thứcxử l
ý
liên
q
uan đến
g
p g
ý
q
dữ liệu: dữ liệutrựctiếphoặcdữ liệulấytừ CSDL
4
Bài 2: Xây dựng ứng dụng theo mô hình MVC
11
XâXâ
dd
MdlMdl
1
.
1
.
Xâ
y
Xâ
y
d
ựng
d
ựng
M
o
d
e
lM
o
d
e
l
Ví
dụ
:
Ví
dụ
:
– Ví dụ: Hiểnthị sách có trong danh mục sách: dạng danh mục
sách và dạng hiểnthị từng sách theo lựachọncủangười dùng.
Danh mục sách
Hiểnthị chi tiết sách theo
lựachọncủangười dùng
5
Bài 2: Xây dựng ứng dụng theo mô hình MVC
11
XâXâ
dd
MdlMdl
1
.
1
.
Xâ
y
Xâ
y
d
ựng
d
ựng
M
o
d
e
l
M
o
d
e
l
Phân
tích
yêu
cầu
:
Phân
tích
yêu
cầu
:
– Theo yêu cầu: các món ănsẽ có các thông
tin: title, author, description
Xây dựng class Book để tổ chức thông tin
này
Class
này
sẽ
được
gọi
sử
dụng
tại
model
của
Class
này
sẽ
được
gọi
sử
dụng
tại
model
của
ví dụ
6
Bài 2: Xây dựng ứng dụng theo mô hình MVC
11
XâXâ
dd
MdlMdl
1
.
1
.
Xâ
y
Xâ
y
d
ựng
d
ựng
M
o
d
e
lM
o
d
e
l
class Book {
public $title;
public $author;
public $description;
public function construct($title $author
public
function
__
construct($title
,
$author
,
$description)
{
$this->title = $title;
$this->author = $author;
$h
d$d
$
t
h
is->
d
escription =
$d
escription;
}
}
7
}
Bài 2: Xây dựng ứng dụng theo mô hình MVC
11
XâXâ
dd
MdlMdl
1
.
1
.
Xâ
y
Xâ
y
d
ựng
d
ựng
M
o
d
e
l
M
o
d
e
l
Phân
tích
yêu
cầu
:
Phân
tích
yêu
cầu
:
– Cầnhiểnthị các thông tin về sách: Xây dựng
ử
ề
Model là nơix
ử
lý thông tin v
ề
các sách
– Vớiyêucầucủangười dùng là hiểnthị danh
sách các sách, và sau khi chọnmộtsách
bằng cách click vào link thì sẽ hiểnthị thông
tin củasáchđượcchọn => cầnphải có hai
function: lấy danh mụcsáchvàlấymộtsách
theo tiêu đề đượcchọn
8
Bài 2: Xây dựng ứng dụng theo mô hình MVC
33
XâXâ
dd
ViVi
3
.
3
.
Xâ
y
Xâ
y
d
ựng
d
ựng
Vi
ew
Vi
ew
class
bookModel
{
class
bookModel
{
public function getBookList()
{ // here goes some hardcoded values to simulate the
database
database
return array(
"Jungle Book" => new Book("Jungle Book", "R.
Kipling", "A classic book."),
"Professional CodeIgniter" => new Book("Professional
CodeIgniter", "Thomas Mayer", "A book about how to
program with CodeIgniter Framework"),
"PHP for Dummies" => new Book("PHP for Dummies",
"Some Smart Guy", "A tutorial book about propramming
language")
);
);
9
);
}
Bài 2: Xây dựng ứng dụng theo mô hình MVC
11
XâXâ
dd
MdlMdl
1
.
1
.
Xâ
y
Xâ
y
d
ựng
d
ựng
M
o
d
e
lM
o
d
e
l
public function
getBook
($title)
public
function
getBook
($title)
{ // we use the previous function to get all the
books and then we return the requested one.
// in a real life scenario this will be done
through a db select command
$
allBooks
= $this
-
>
getBookList
();
$
allBooks
=
$this
>
getBookList
();
return $allBooks[$title];
}
}
10
Bài 2: Xây dựng ứng dụng theo mô hình MVC
22
XâXâ
dd
CtllCtll
2
.
2
.
Xâ
y
Xâ
y
d
ựng
d
ựng
C
on
t
ro
ll
er
C
on
t
ro
ll
er
Controller
được
xem
là
“
cơ
bắp
”
của
ứng
Controller
được
xem
là
cơ
bắp
của
ứng
dụng.
Mọithứ mà người dùng có thể thựchiện
trên
trang
web
đều
được
thể
hiện
trong
trên
trang
web
đều
được
thể
hiện
trong
Controller.
Đ
iề
khiể
á
kiệ
ủ
ời
dù
ó
Đ
iề
u
khiể
nc
á
csự
kiệ
nc
ủ
angư
ời
dù
ng c
ó
ảnh hưởng đến Model và View
11
Bài 2: Xây dựng ứng dụng theo mô hình MVC
22
XâXâ
dd
CtllCtll
2
.
2
.
Xâ
y
Xâ
y
d
ựng
d
ựng
C
on
t
ro
ll
er
C
on
t
ro
ll
er
Ví
dụ
:
cũng
với
ví
dụ
trên
Ví
dụ
:
cũng
với
ví
dụ
trên
– Phân tích: Ta thấycầnphảixâydựng một
ế
ể
ấ
Controller tương tác đ
ế
n Model đ
ể
l
ấ
ydữ liệu
theo yêu cầuvàtương tác đếnView hiểnthị
dữ liệucóđượctừ Model .
12
Bài 2: Xây dựng ứng dụng theo mô hình MVC
22
XâXâ
dd
CtllCtll
2
.
2
.
Xâ
y
Xâ
y
d
ựng
d
ựng
C
on
t
ro
ll
er
C
on
t
ro
ll
er
class Controller {
class
Controller
{
public $model;
public function __construct()
{
$this->model = new bookModel();
}
}
public function invoke()
{
if (!isset($_GET['book']))
{
//
khi
người
dùng
chưa
lựa
chọn
thì
sẽ
hiển
//
khi
người
dùng
chưa
lựa
chọn
thì
sẽ
hiển
thị danh mục sách
$books = $this->model->getBookList();
include 'view/booklist.php';
}
13