Sử d ZF đểSử dụng ZF để… Tạo ứng dụng web theo mô hình chuẩn MVC – Tạo ứng dụng web theo mô hình chuẩn MVC – Url tiêu chuẩn, ngắn gọn – Hỗ trợ phân quyền tới từng Action – Có các thành p
Trang 1LẬP TRÌNH PHP NÂNG CAO
LẬP TRÌNH PHP NÂNG CAO
ZEND FRAMEWORK 2
Trang 2Bài 1: Tổng quan Zend
Trang 311 Giới thiệ ZF Giới thiệ ZF
11 Giới thiệu ZF Giới thiệu ZF
bằng ngôn ngữ PHP và dựa trên mô hình MVC, giúp
tách các thành phần xử lý ra một cách rõ ràng cho p ý g
website của bạn, giúp cho code được dễ dàng quản lý,
chỉnh sửa và nâng cấp
– Viết huớng đối tuợng
– Cung cấp 1 loạt các ứng dụng API của các nhà cung
cấp hàng đầu như Google, Yahoo, Flick
Trang 4Sử d ZF để
Sử dụng ZF để…
Tạo ứng dụng web theo mô hình chuẩn MVC
– Tạo ứng dụng web theo mô hình chuẩn MVC
– Url tiêu chuẩn, ngắn gọn
– Hỗ trợ phân quyền tới từng Action
– Có các thành phần thư viên hỗ trợ API của p ợ
các nhà cung cấp như Google, Yahoo, Flick
– Quản lý code dễ dàng, liệt kê và lấy các truy Quản lý code dễ dàng, liệt kê và lấy các truy
vấn history
Dễ dàng phát triển thêm các ứng dụng nhúng
– Dễ dàng phát triển thêm các ứng dụng nhúng,
sử dụng Plugins
Trang 52 Lý d h ZF
2 Lý do chọn ZF
– Có rất nhiều thư viện được hỗ trợ sẵn
– Có rất nhiều thư viện được hỗ trợ sẵn
triển ngôn ngữ PHP phát triển (www.zend.com)
triển ngôn ngữ PHP phát triển (www.zend.com)
– được xây dựng trên nền tảng lập trình hướng đối
tượng nên có thể thừa kế, nâng cấp các ứng dụng ợ g , g p g ụ gmột cách dễ dàng
– Những thành viên phát triển Zend Framework là
những chuyên gia nổi tiếng về mã nguồn mở và PHP trên thế giới
ẩ
Zend Framework rất linh hoạt giúp chúng ta có thể
Trang 6– Có tài liệu để tham khảo
– Những ứng dụng lớn hiện nay đã dần chuyển quaNhững ứng dụng lớn hiện nay đã dần chuyển qua
dùng Zend Framework làm nền tảng
– Nhu cầu tuyển dụng lập trình viên biết Zend y ụ g ập
Framework lớn– Bảo mật của các ứng dụng rất tốt nên tránh được các g glỗi thường gặp trong các ứng dụng viết bằng PHP
thường
Trang 73 Giới thiệ ZF2
Zend Framework 2 là một framwork mã
– Zend Framework 2 là một framwork 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 x zend
dụng web sử dụng PHP 5.3.x zend Framework được xây dựng hoàn toàn theo hướng đối tượng OOP và sử dụng hầu hết
hướng đối tượng OOP và sử dụng hầu hết các đặc điểm mới của PHP 5.3 như
namespaces late static binding phương thức
namespaces, late static binding, phương thức lambda và closures.
– Zend Framework 2 phát triển từ Zend
Framework 1, một framework PHP rất thành
Trang 8mạnh của kiểu viết này Các lớp của ZF được BA
mạnh của kiểu viết này Các lớp của ZF được BA
(Business Analysis) rất chuẩn và khi cần mở rộng ta có
thể dùng thể dùng tính chất thừa kế của OOP Nói
Trang 9Đặ điể ZF2
Đặc điểm ZF2
đổi trong core nên ta có thể dễ dàng update
ZF tích hợp được gần như tất cả các thư viện PHP vàZF tích hợp được gần như tất cả các thư viện PHP và
các CMS khác để sử dụng VD: Smarty Pear
-FCKEditor - Drupal …
Cách viết của ZF rất thân thiện và đơn giản Tích hợp
những mới nhất của lập trình web như: JSON Search
Syndication - Web Services
phát triển dài lâu
Trang 114 Z d MVC
4 Zend MVC
Zend\Mvc là một nhánh thực hiện MVC mới
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
instance và workflow trong ứng dụng
Trang 124 Z d MVC
4 Zend MVC
Thành phần này được sử dụng mọi nơi từ khởi tạo ban đầu của ứng dụng, thông qua việc gọi trả về của g g g q gresponse và request, để thiết lập và nhận các định tuyến và các định tuyến phù hợp (tương ứng), cũng
như render các view
– Zend\Http – đặc biệt là các đối tượng request và
response được sử dụng trong:
– Zend\Stdlib\DispatchableInterface Tất cả các
“controller” đơn giản là đối tượng dispatchablecontroller đơn giản là đối tượng dispatchable
Trang 134 Z d MVC
4 Zend MVC
Trong MVC layer có một số thành phần con
Trong MVC layer, có một số thành phần con
được giới thiệu:
Zend\Mvc\Router chứa các lớp liên quan đến định
– 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ó (hoặc
tới các controller tương ứng của nó (hoặc dispatchable)
Trang 144 Z d MVC
4 Zend MVC
– Zend\Mvc\Controller một bộ các lớp “controller” trừu
– Zend\Mvc\Controller, một bộ các lớp controller trừu
tượng với các trách nhiệm cơ bản như hệ thống các event, action gửi đi…g
– Zend\Mvc\Service cung một bộ các yếu tố và định
nghĩa ServiceManager workflow của ứng dụng mặc định
renderer selection, độ phân giải view script, đăng ký helper…; ngoài ra, nó cung cấp các listener liên lạc với MVC workflow cung cấp các tính năng như phânvới MVC workflow, cung cấp các tính năng như phân giải tên template tự động, tạo view model tự động
Trang 154 Z d MVC
4 Zend MVC
Gateway của MVC là đối tượng
Gateway của MVC là đối tượng
Zend\Mvc\Application (gọi tắt là “Application”)
Nhiệ hí h ủ “A li ti ” là khởi t á
Nhiệm vụ chính của “Application” là khởi tạo các 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, nó sẽ render view,
hoàn thành các request, trả về và gửi response.
Trang 17– Tập tin public/index.php: gồm tất cả các yêu cầu
(request) của người dùng đến website nhận một
(request) của người dùng đến website, nhận một mảng các cấu hình đặt tại tập tin
config/application.config.php, khi trả về nó gọi g pp g p p, gọphương thức run() của “Application”, xử lý yêu cầu và gửi lại phản hồi cho người dùng
ấ
Zend\ModuleManager để tải các module và cấu hình hợp nhất
hợp nhất
Trang 184 Z d MVC
4 Zend MVC
của tổ chức thứ ba mà ứng dụng cần dùng tới Nó có thể bao gồm cả ZF hoặc các thư viện từ các dự án gkhác, không nên sửa đổi trạng thái ban đầu của các
thư viện và module đặt trong thư mục vendor chúng.
ề
cấp các chức năng của ứng dụng
Trang 194 Z d MVC
4 Zend MVC
Cấu trúc module cơ bản:
Cấu trúc module cơ bản:
chức năng MVC code thư viện view script và các tài
chức năng MVC, code thư viện, view script và các tài nguyên chung như: hình ảnh, CSS, JavaScript Yêu cầu duy nhất – có thể là tùy chọn là một module hoạt y y ọ ộ ạđộng như một namespace PHP và nó chứa lớp
Module.php dưới namespace Lớp này được
Zend\ModuleManager sử dụng để thực hiện một số nhiệm vụ
Trang 204 Z d MVC
4 Zend MVC
Trang 214 Z d MVC
4 Zend MVC
mục module cũng phải có tên là tên của namespace
Namespace này cũng có thể bao gồm một tiền tố của p y g gnhà cung cấp
• Ví dụ: Module liên quan đến “User” có chức năng được cung
ấ bởi Z d thì ó thể đặt tê là “Z dU ”
cấp bởi Zend thì có thể đặt tên là “ZendUser”.
– Tập tin Module.php sẽ nằm trong thư mục –
namespace nàynamespace này
namespace ZendUser;
class Module
Trang 224 Z d MVC
4 Zend MVC
Có ba tập tin autoload * php không bắt buộc
Có ba tập tin autoload_ php không bắt buộc,
nhưng khuyến khích nên có, đó là:
autoload classmap php: trả về mảng classmap của
– autoload_classmap.php: trả về mảng classmap của
các cặp class name/filename (với các tên tập tin
được thông qua hằng số DIR )
– autoload_function.php: trả về một callback PHP mà
có thể thông qua spl autoload register() Thông g q p _ _ g () gthường callback này nên sử dụng ánh xạ được trả về bởi autoload_classmap.php
– autoload_register.php: nên đăng ký một PHP
callback (thường được trả về bởi
Trang 234 Z d MVC
4 Zend MVC
Đặc điểm của ba file này là cung cấp các cơ chế
Đặc điểm của ba file này là cung cấp các cơ chế mặc định phù hợp để tự động tải các lớp trong
module do đó cung cấp cách thức dễ dàng để
module, do đó cung cấp cách thức dễ dàng để
thực thi module mà không cần
Zend\ModuleManager
Trang 244 Z d MVC
4 Zend MVC
Thư mục config : nên chứa các cấu hình module
Thư mục config : nên chứa các cấu hình module
cụ thể Các file này có đĩnh dạng được hỗ trợ
của Zend\Config Cấu hình chính nên là
của Zend\Config Cấu hình chính nên là
“module.format”, và cấu hình dựa trên PHP nên
là “module config php”
là module.config.php
Thư mục src : tuân thủ cấu trúc thư mục chứa
source code của module Nên có ít nhất một thư
mục con trong thư mục namespace.
Trang 254 Z d MVC
4 Zend MVC
Thư mục view : chứa các view script có liên
Thư mục view : chứa các view script có liên
quan tới các controller.
Thư mục test : chứa các unit test của ứng dụng
Thông thường sử dụng PHPUnit, và chứa các
yếu tố liên quan đến cấu hình của nó (ví dụ như
phpunit.xml, bootstrap.php)
Thư mục public : chứa những thứ dùng chung
cho ứng dụng, có thể là thư mục images, CSS,
JavaScript…
Trang 264 Z d MVC
4 Zend MVC
Khởi tạo một module trong ứng dụng
Khởi tạo một module trong ứng dụng
– Để khởi tạo một module trong ứng dụng, ta thông qua Zend\ModuleManager\ModuleManager
Zend\ModuleManager\ModuleManager
– Thành phần này cho phép ta chỉ đến nơi module đó
tồn tại Sau đó nó sẽ xác định vị trí module và khởi
tồn tại Sau đó nó sẽ xác định vị trí module và khởi tạo Các lớp module có thể gắn vào các listener khác nhau trên ModuleManager để cung cấp thông tin,
service, listener… cho ứng dụng
Trang 274 Z d MVC
4 Zend MVC
• Cấu hình module manager: đơn giản chỉ cần thông báo cho module manager biết module nào để tải và có khả năng cung
ấ ấ
cấp cấu hình cho module listener.
• Trong tập tin application.config.php, ta cung cấp các thông tin cấu hình:
Trang 284 Z d MVC
4 Zend MVC
Mỗi lớp “Module” có cấu hình mà nó muốn “Application”
Mỗi lớp Module có cấu hình mà nó muốn Application
biết sẽ được khai báo trong phương thức getConfig()
Phương thức này sẽ trả về một mảng hoặc một đối g y g
tượng Traversable như Zend\Config\Config
namespace ZendUser;
class Module { public function getConfig() {{
return include DIR '/config/module.config.php' }
}
Ngoài ra còn có nhiều phương thức khác có thể định
nghĩa để cung cấp thông tin autoloader, service cho
}
Trang 29– Download ứng dụng mẫu (Skeleton
– Download ứng dụng mẫu (Skeleton
Application) của zend framework 2.x tại
Trang 3055 Cài đặt à ấ hì h ZF2
5
5 Cài đặt và cấu hình ZF2
Giải nén ứng dụng mẫu vào thư mục lưu trữ
– Giải nén ứng dụng mẫu vào thư mục lưu trữ
web
– Cấu trúc cây thư mục ứng dụng mẫu:
Trang 325 Cài đặt à ấ hì h ZF2
Tạo thư mục library trong ứng dụng này sau
– Tạo thư mục library trong ứng dụng này sau
đó đem gói zend framework 2.x giải nén tại đây
Trang 335 Cài đặt à ấ hì h ZF2
Chú ý: Nếu muốn sử dụng thư viện một Zend
Chú ý: Nếu muốn sử dụng thư viện một Zend
cho tất cả các ứng dụng thì cần phải tạo ra một
biến toàn cục như sau:
– Vào Computer => Properties => Advanced =>
E i t V i bl > N > T biế Environment Variables => New => Tạo biến mới => OK
Trang 34của Zend Framwork 2.x đặt tại:
H:\wamp\www\PHP_NC\zend_app vendor\ZF2
Trang 355 Cài đặt à ấ hì h ZF2
Kết quả sau khi cài đặt và cấu hình thành công:
Kết quả sau khi cài đặt và cấu hình thành công:
Trang 37LẬP TRÌNH PHP NÂNG CAO
ZEND FRAMEWORK 2
Trang 38Bài 2: Zend Module
1 Zend Module
2 Xây dựng module cho ứng dụng
3 Zend Module Manager
4 Zend Module Autoloader
5 Cấu hình cho module
6 Thông báo về việc có module mới
Trang 391 Zend Module
Khái niệm:
của website phục vụ cho một chức năng hoàn chỉnh nào
viện code, view script và các tài nguyên dùng chung như hình ảnh, CSS, và JavaScript
Trang 401 Zend Module
Trong ZF2 tất cả đều được tối ưu hóa thành
module Người dùng có thể tự xây dựng module
cho mình hoặc có thể chép module của người
khác về ứng dụng để phục vụ cho công việc của mình.
Hệ thống module được tạo thành như sau:
– Module Autoloader
– Module Manager
– ModuleManager Listeners
Trang 411 Zend Module
– Module Autoloader: Đây là thành phần đặc biệt giúp
cho việc xử lý các namespace, mapping, và giữ các instances đó khi cần xử lý
quản lý module, quản lý và merger các cấu hình của các module, điều khiển việc loader
– ModuleManager Listeners – Các Event listener có
thể được gắn với các sự kiện khác nhau của module manager Những listener có thể làm mọi việc từ việc giải quyết và load các module tới việc thực hiện khởi
Trang 422 Xây dựng module cho ứng dụng
Zend framework sử dụng hệ thống module và ta
sẽ tổ chức các nội dung chính của ứng dụng
trong các module
Trong gói mẫu đã cài đặt có Module Application,
được cung cấp bởi Skeleton, nó cung cấp các
định nghĩa và cấu hình chuẩn mà một module
cần phải có (bootstrapping, error và routing
configuration), đồng thời cung cấp các các điều
khiển cần cho ứng dụng
Trang 432 Xây dựng module cho ứng dụng
Tuy nhiên, ta sẽ chỉ tham khảo module này để
tạo và làm riêng một module và thực hiện các
chức năng cần thiết trong module riêng.
Ta sẽ đặt tất cả các code cần thiết vào module
của chúng ta, nơi chứa các controller, model,
form và view kèm theo các cấu hình
(configuration)
Ta cũng sẽ tinh chỉnh module Application khi
được yêu cầu
Trang 442 Xây dựng module cho ứng dụng
Ví dụ: Xây dựng ứng dụng đầu tiên với
Zend Framework có kết nối đến CSDL
– Ứng dụng sẽ xây dựng là một cửa hàng bán
tranh Trang chính sẽ liệt kê các tranh mà cửa hàng có bán Cửa hàng có thể hiển thị, thêm, xóa và cập nhật Tranh khi cần.
Trang 452 Xây dựng module cho ứng dụng
Theo yêu cầu trên, sẽ có 4 trang trong
ứng dụng:
– Danh mục tranh, kèm theo link để người dùng
có thể xem chi tiết; nếu là quản trị thì có thể thêm, xóa, cập nhật
– Thêm mới tranh: form dùng để thêm mới
– Cập nhật tranh: form dùng để cập nhật
– Xóa tranh: form dùng để xóa
Trang 462 Xây dựng module cho ứng dụng
Cần phải lưu trữ dữ liệu vào CSDL đơn
giản như sau:
Bảng Product (để lưu các tranh)
Trang 472 Xây dựng module cho ứng dụng
/Model /view
Module Product có các thư
mục con với những loại file khác nhau Các file PHP chứa các lớp trong namespace
Trang 483 Zend Module Manager
Để load và cấu hình một module, ZF2 có
ModuleManager
Module này có thể xem như là file
Module.php đặt trong thư mục gốc của
module
– Ví dụ: module/Product và có một class được
gọi là Product/Module bên trong nó.
Các lớp trong cùng một module sẽ có
namespace có tên là tên của module (tên
Trang 493 Zend Module Manager
Thực hiện module (tt)
– Bước 2: Xây dựng Module.php nằm trong
module Product namespace Product;
class Module{
public function getAutoloaderConfig(){
return array( 'Zend\Loader\ClassMapAutoloader' => array(
DIR '/autoload_classmap.php‘, ),
'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array(
NAMESPACE => DIR '/src/' NAMESPACE , ), ),);
}
public function getConfig(){
Trang 504 Zend Module Autoloader
tương thích với AutoloaderFactory Cần phải cấu hình để
có thể thêm class map file vào ClassmapAutoloader và
đồng thời thêm namespace của module này vào
StandardAutoloader
một đường dẫn để có thể tìm thấy các file của
namespace này Đó là tuân thủ theo PSR-0 và để các
lớp map trực tiếp đến các files theo các quy tắc của
PSR-0
Khi triển khai ứng dụng, ta không cần phải load các file
thông qua classmap, vì thế ta chỉ cần cung cấp một
Trang 514 Zend Module Autoloader
Thực hiện module (tt)
– Bước 3: Tạo file autoload_classmap.php có nội
dung sau:
– Với một mảng rỗng như trên thì bất cứ khi nào
autoloader tìm kiếm lớp trong Product namespace,
nó sẽ tự động gọi trở lại StandardAutoloader.
// module/Product/autoload_classmap.php:
return array();
Trang 524 Zend Module Autoloader
Chú ý:
– Ta đang sử dụng Composer, như là một sự
thay thế, ta không triển khai (implement) getAutoloaderConfig() và thay vào đó ta thêm
"Application": "module/Application/src" vào psr-0 key trong composer.json
– Nếu ta chọn cách này, thì ta cần phải chạy
php composer.php update để cập nhật composer autoloading files.