Framework là m t th vi n các l p đư đ c xây d ng hoàn ch nh, là b khung đ
phát tri n ng d ng. PHP c ng đ c c ng đ ng xây d ng nên nhi u framework khác
làm cho ng d ng tr nên trôi ch y h n. Nói cách khác, PHP framework giúp ng i l p trình ti t ki m đ c th i gian, t ng s n đ nh c a ng d ng, gi m thi u s l n ph i vi t l i mư, đ ng th i cung c p c ch t ng tác chính xác gi a c s d li u, mư l nh (PHP) và giao di n (HTML). Ý t ng chung đ ng sau cách th c làm vi c c a nh ng PHP framework chính là mô hình MVC.
M t trong nh ng PHP framework đ c s d ng ph bi n là Zend. 2.4.3.1. Gi i thi u
Zend là m t framework đu c xây d ng d a trênngôn ng PHP và mô hình MVC.
Nógiúptách các thành ph n x lý ra m t cách rõ ràng, làm cho mư l nh d dàng qu n
lý, ch nh s a và nâng c p.
Zend Framework 2 (ZF2) ra m t vào tháng 9 n m 2012, v i r t nhi u thay đ i so
v i phiên b n đ u tiên. ây là m t framework mư ngu n m dùng cho vi c phát tri n
các ng d ng web s d ng PHP 5.3, hoàn toàn h ng đ i t ng c ng nh áp d ng h u
h t các đ c đi m m i c a PHP 5.3 nh không gian tên (namespace), k thu t s d ng
khóa static (late static binding) vàcú pháp lambda. 2.4.3.2. c đi m
Nhìn chung c hai phiên b n, Zend có các đ c đi m sau:
S d ng ngôn ng l p trình PHP. Vi t theo hu ng đ i tu ng.
H tr phát tri n ng d ng theo mô hình MVC.
Là 1 ph n m m ngu n m có s h tr c ng đ ng.
Cung c p 1 lo t các ng d ng API c a các nhà cung c p l n nh Google, Yahoo, Flick...
Riêng ZF2 có nh ng đ c đi m m i:
Nh ng thành ph n trong ZF2 là các thành ph n riêng bi t, m i thành ph n
đ c thi t k đ ít ph thu c vào các thành ph n khác.
Thi t k theo nguyên t c l p trình h ng đ i t ng th ng nh t.
Cung c p m t mô hình MVC m nh m có hi u su t cao.
Thành ph n Form h tr HTML5, t o giao di n, ki m tra đi u ki n đ u và
2.4.3.3. Ki n trúc MVC trong Zend Framework 2
Trong Zend, nguyên t c thi t k ng d ng c ng tuân theo mô hình MVC chu n.
Zend\Mvc là m t nhánh th c hi n MVC m i đ c thi t k cho ZF2, t p trung vào hi u su t và tính linh ho t.
Hình 2.4- Ki n trúc MVC trong Zend (ngu n:http://www.itnewsoftechnology.com)
M t s thành ph n tiêu bi u c a l p MVC:
Zend\Mvc\Application (g i t t là “Application”): kh i t o tài nguyên, đnh tuy n request, nh n và g i controller phù h p trong các quá trình đnh tuy n. Sau khi hoàn thành, sau đó xu t sang view, hoàn thành các request, tr v và g i response.
Zend\Mvc\Controller: m t t p h p các l p “controller”, m i controller g m nhi u action. Action làm nhi m v đi u khi n ho t đ ng request và
response trên m t trang web.
Zend\Mvc\Router: ch a các l p liên quan đ n đnh tuy n m t request. Nói
cách khác, nó n i các request t i các controller t ng ng c a nó.
Zend\Mvc\Service: cung c p m t t p h p các y u t và đnh ngh a ServiceManager.
Zend\Mvc\View: hi n th thông tin lên trang web thông qua các th HTML. 2.4.3.4. Module trong Zend
Module là m t nhóm trong đó có ch a các thành ph n c a website ph c v cho
m t ch c n ng hoàn ch nh nàođó. Trong ZF2 t t c đ u đ c t i u hóa thành module. Vi c xây d ng ng d ng theo module giúp rút ng n th i gian l p trình c ng nh phân
công công vi c cho t ng nhóm phát tri n, c ng nh kh n ng tái s d ng t nh ng d
án khác. Module trong Zend có th ch a: mưPHP, th vi n thi t k s n, view script và
Tr c tiên, ng i l p trình c n t i v b khung c a ZF2 [xem ph l c E], trong
đó m c đ nh có module m u Application. Nh ng module khác do ng i l p trình thêm
vào nh ng v n ph i đ m b o nguyên t c đ c tên và c u trúc gi ng nh module m u.
H th ng module đ c t o thành nh sau:
Module Autoloader: ây là thành ph n đ c bi t giúp cho vi c x lý các
namespace, mapping, và l u gi các instance khi c n x lý.
Module Manager: Qu n lý module và các c u hình c a module, đi u khi n vi c n p module khi th c thi ng d ng.
ModuleManager Listeners: Các Event listener có th đ c g n v i nhi u s ki n khác nhau c a module manager. Chúng có th làm m i vi c t vi c gi i quy t và n p các module t i vi c kh i t o nh ng tác v ph c t p. 2.4.3.5. nh tuy n trong Zend
nh tuy n (routing) trong Zend hi u c b n là vi c ch đnh vi c g i m t action trong controller t ng ng cho m t view và hi n th đ ng d n này lên thanh đa ch URL c a trình duy t web. ZF2 có kh n ngánh x đa ch URL r t m nh m khi cung
c p ph ng pháp r t linh ho t trong vi c ánh x URLs sang cho controller. Ngoài ra,
ZF2 còn có kh n ng phân tích URL, chuy n các thông s trong URL thành các tham
s trong ph n g i hàm c a controller.
Có nhi u ph ng pháp đ nh tuy n trong ZF2, m t trong s đó là segment. u
tiên c n ph i ch đ nh hình d ng đ ng d n trong tham s “route”, k đ n là đ nh d ng
ký t đ c phép cho m i segment c a route trong tham s “constraints”, và cu i cùng
là ch ra action m c đ nh c a m i controller trong tham s “defaults”.
array( 'type' => 'segment', 'options' => array( 'route' => '/application[/:controller][/:action][/:id]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index',
'action' => 'index', ), ) ) B ng 2.2- nh tuy n trong ZF2 2.4.3.6. K t n i và truy v n c s d li u Zend\Db là m t l p đ m nh n vi c k t n i t i các h qu n tr c s d li u c a ZF2. Có 2 ph ng pháp th ng dùng là ZendDbSql và ZendDb TableGateway.
ZendDbAdapter
i t ng Adapter là m t thành ph n (sub-component) quan tr ng nh t c a Zend\Db. Nó ch u trách nhi m t o c ng k t n i các mư l nh đ c vi t trong Zend\Db
t i các ph n m r ng PHP và c s d li u t nhà cung c p. th c hi n k t n i này,
đ i t ng Adapter t o ra m t l p tr u t ng cho các thành ph n m r ng PHP, g i là
"Driver" c a Zend\Db adapter. Nó c ng t o ra m t l p tr u t ng, g i là "Platform"
c a adapter, cho các ngu n khác nhau mà m i nhà cung c p platform c th có th có
đ k t n i t i h qu n tr c s d li u.
k t n i t i c s d li u, c n t o m t adapter b ng cách s d ng l p Zend\Db\Adapter\Adapter. Thông th ng, m t m ng c u hình ho c m t t p tin xml
ch a các thông tin c u hình c s d li u s đ c dùng đ k t n i v i adapter.
$adapter = new \Zend\Db\Adapter\Adapter(array( 'driver' => '<tên driver>',
'database' => '<tên c s d li u>',
'username' => '<tên đ ng nh p>',
'password' => '<m t kh u>' ));
B ng 2.3- K t n i c s d li u s d ng Zend\Db\Adapter trong ZF2
Danh sách các driver đ c h tr :
Mysqli: dành cho MySQL.
Pgsql: dành cho PostgreSQL.
Sqlsrv: dành cho SQL Server.
Pdo_Mysql: dành cho MySQL thông qua m r ng PDO.
Pdo_Sqlite: dành cho SQLite thông qua m r ng PDO.
ZendDbSql
Zend\Db\Sql là m t l p tr u t ng dùng đ xây d ng các truy v n SQL c b n, c th thông quaAPI h ng đ i t ng. K t qu cu i cùng c a đ i t ng Zend\Db\Sql s v a t o ra m t câu l nh (statement) và câu l nh ch a bi n (parameter container) đ i di n cho truy v n đích, ho c là m t chu i đ y đ có th th c thi tr c ti p trên n n t ng c a c s d li u.
Các đ i t ng Zend\Db\Sql c n cung c p m t đ i t ng adapter đ k t n i v i h
qu n tr c s d li u. Cú pháp k t n i theo ki m lambda, ngh a là ng i l p trình có th th c hi n nhi u câu l nh truy v n n i ti p nhau.
$sql = new Sql($adapter);
$select = $sql->select(); // tr v đ i t ng Zend\Db\Sql\Select $insert = $sql->insert(); // tr v đ i t ng Zend\Db\Sql\Insert $update = $sql->update(); // tr v đ i t ng Zend\Db\Sql\Update $delete = $sql->delete(); // tr v đ i t ng Zend\Db\Sql\Delete
B ng 2.4- Truy v n c s d li u s d ng Zend\Db\Sql trong ZF2
ZendDb TableGateway
i t ng TableGateway đ c dùng đ cung c p m t đ i t ng đ i di n cho m t
b ng trong c s d li u, và các ph ng th c c a đ i t ng này ánh x đ n nh ng
thao tác t ng t nh trong b ng c a c s d li u. Có hai implementation (k th a t
interface) chính hi u qu nh t là: AbstractTableGateway và TableGateway.
AbstractTableGateway là m t implementation c s tr u t ng cung c p
các ch c n ng nh select(), insert(), update(), delete() th c hi n các công
vi c t ng t nh các đ i t ng SQL, và các ph ng th c selectWith(),
insertWith(), updateWith() và deleteWith()…
TableGateway đ n gi n ch c n thêm m t ph ng th c kh i t o h p lý
cho l p AbstractTableGateway. i t ng TableGateway c th đ c kh i t o hàm kh i t o. Tên b ng và th hi n c a m t adapter c n thi t đ thi t l p m t đ i t ng làm vi c TableGateway. Khi m t ph ng th c đ c th c thi (ch ng h n select()), m t đ i t ng ResultSet s đ c tr v
và s n sàng cho vi c s d ng.
2.4.3.7. ZendForm
D li u do ng i dùng nh p vào c n đ c ki m ch ng đ tránh nh ng h h ng nh h ng t i h th ng. M t trong nh ng ph ng pháp ki m ch ng d li u phía server
trong ZF2 là s d ng l p Zend/Form. ZendForm h tr các hàm d ng s n đ ki m tra ho c l c d li u đ u vào, giúpcho ng i l p trình thu n l i h n trong vi c ki m tra d
li u tr c khi l u vào c s d li u. M t cách tr u t ng, ZendForm chính là c u n i
gi a model và view.
Các b c t o m t bi u m u s d ng ZendForm:
Khai báo bi u m u trong action controller.
T o m t view script đ hi n th bi u m u này.
Thêm nh ng ki m ch ng đ ràng bu c d li u trong ph n form b ng cách
s d ng các Validation mà th vi n Zend cung c p. Trong ph n này, có th xu t l i n u nh d li u nh p vào vi ph m quy t c ki m ch ng.
Quay l i controller, ph i xét n u d li u nh p vào là h p l m i th c hi n
nh ng công vi c ti p theo thông qua hàm isValid().
2.4.3.8. u và nh c đi m
u đi m
Th nh t, Zend là m t n n t ng phát tri n ng d ng lý t ng cho các doanh nghi p l n. Hi n nó đang đ c s d ng t i nhi u ngân hàng c ng nh công ty trên th
gi i, nh BBC, Shaklee, CarinBridge, …
Th hai, các l p trong th vi n d dàng m r ng đ phù h p v i yêu c u m i c a
ng d ng mà không làm nh h ng đ n h th ng đang v n hành. n gi n là ng i
l p trình ch c n t i v phiên b n Zend Framework m i nh t và gi i nén vào th m c
vendor c a d án.
Th ba, tài li u v Zend r t nhi u và đa d ng, giúp cho ng i l p trình d ti p c n t c b n đ n nâng cao. Tuy nhiên, s l ng tài li u chính th ng b i nh ng ng i có uy tín trong ngành l p trình vi t ra l i không nhi u.
Th t , Zend h ng đ n mô hình MVC, v n là m t trong nh ng l a ch n r ng
rưi nh t khi phát tri n ng d ng web. Các module c a MVC và kh n ng phân tách
gi a ph n d li u và ng d ng chính là nguyên nhân chính đ ng sau s ph bi n c a
nó. M t l i th khác làZend h tr h u h t các c s d li u hi n nay, giúp cho ng i
l p trình không c n ph i b n tâml a ch n.
Nh c đi m
V n đ đ u tiên, tuy Zend là m t th vi n mi n phí nh ng bên c nh đó, các ti n
c n thi t trong quá trình phát tri n ng d ng và đ có đ c nó, ng i l p trình c n ph i t n m t kho n chi phí khá l n.
V n đ th hai, do b th vi n khá đ s nên trong đó ch c ch n ch a r t nhi u l p đ m nh n nh ng công vi c khác nhau. i u này gây khó kh n và t n th i gian tìm hi u cho ng i l p trình ng d ng khi mu n tìm ki m chính xác m t l p mà h quan
tâm, m c dùtài li u h ng d n r t đa d ng.
V n đ th ba, có m t s thay đ i r t khác bi t hai phiên b n, khi n cho vi c c p nh t ng d ng tr nên r c r i. H u h t m i th đ u thay đ i, t cách thi t l p route, tên l p, cú pháp, … khi chuy n t phiên b n 1 lên 2. Th m chí nh ng ng i v n đư rành v Zend phiên b n c c ng c m th y khó kh n khi tìm hi u phiên b n hi n t i.
Và cu i cùng, cú pháp c a Zend t ng đ i khó vi t, đ c bi t là v i nh ng ng i m i ch p ch ng làm quen v i ngôn ng PHP. H s c m th y gi a Zend và PHP có m t s khác bi t r t l n. Nh ng ng i này cho bi t, cú pháp c a Zend, theo nh h ng d n chính th ng, có v r t “hàn lâm”.
2.4.3.9. Nh n xỨt
Zend Framework là th vi n l p trình d a trên ngôn ng PHP, đ c thi t k theo
h ng đ i t ng và h tr l p trình theo mô hình MVC. Vi c l p trình đ c chia thành
t ng module, tách b ch gi a t ng ph n x lý cho website, nó giúp cho mư l nh c a ng d ng trông sáng s a h n,đ ng th i d qu n lý, chnh s a và nâng c p.