Tài liệu tham khảo công nghệ thông tin Xây dựng nền tảng hỗ trợ lập trình web dựa trên mô hình mvc
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Bùi Xuân Thăng
XÂY DỰNG NỀN TẢNG HỖ TRỢ LẬP TRÌNH WEBDỰA TRÊN
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Bùi Xuân Thăng
XÂY DỰNG NỀN TẢNG HỖ TRỢ LẬP TRÌNH WEBDỰA TRÊN
Trang 3LỜI CẢM ƠN
Lời đầu tiên, tôi xin gửi lời cảm ơn chân thành tới thầy giáo, Tiến sĩ Trương Ninh Thuận,người đã hướng dẫn và chỉ bảo tận tình cho tôi trong suốt quá trình học tập cũng như thựchiện khóa luận tốt nghiệp này.
Tôi cũng xin cảm ơn các thầy, cô giáo đã chỉ dạy trong suốt thời gian gian tôi học tập tạitrường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội Cảm ơn các bạn Hoàng ĐìnhQuang, Nguyễn Văn Vũ, Phan Trọng Khanh, Đàm Thanh Tùng, những người bạn tốt đãgiúp đỡ tôi về mặt kỹ thuật trong quá trình nghiên cứu, xây dựng sản phẩm được trình bàytrong khóa luận tốt nghiệp này.
Ngoài ra, tôi muốn gửi lời cám ơn tới bố mẹ, người thân trong gia đình - những người đãhết sức ủng hộ, giúp đỡ và động viên tôi trong suốt quá trình học tập đã qua.
Cuối cùng, tôi xin gửi lời cám ơn chân thành và sâu sắc tới Ban Giám đốc công ty TNHHISDS đã tạo mọi điều kiện về cơ sở vật chất giúp tôi hoàn thành khóa luận này
Trang 4TÓM TẮT KHÓA LUẬN
Khóa luận tốt nghiệp này trình bày một số hiểu biết cơ bản về các nền tảng hỗ trợ lậptrình ứng dụng web (Web application framework) và mô hình MVC (Model ViewController) cũng như vai trò của các thành phần MVC trong Web framework Qua đó giớithiệu một framework tự xây dựng bằng ngôn ngữ PHP với các ưu điểm về cấu trúc và tốcđộ so với các PHP framework hiện nay Framework được đặt tên là Hiphop framework.Phần chính của khóa luận tập trung giải thích phương thức vận hành của ứng dụng đượcxây dựng bằng Hiphop, bước đầu giúp các nhà phát triển nắm được cách thức xây dựngứng dụng trên Hiphop.
Phần cuối của khóa luận giới thiệu các thư viện, hàm tích hợp trong Hiphop hỗ trợ người lập trình trong quá trình phát triển ứng dụng
Trang 5MỤC LỤC
CHƯƠNG 1: KHÁI NIỆM VỀ WEB APPLICATION FRAMEWORK VÀ MÔ HÌNH MVC 6
1.1 Web Application Framework là gì? 6
1.2 PHP Framework 6
1.3 MVC là gì? 7
1.3.1 Lịch sử MVC 7
1.3.2 Vai trò của các thành phần M-V-C trong Web framework 8
CHƯƠNG 2 GIỚI THIỆU FRAMEWORK ĐÃ XÂY DỰNG 13
2.1 Tổng quan về framework đã xây dựng 13
2.2 Kiến trúc của Hiphop framework 16
2.2.1 Tổng quát về hệ thống thư mục trong Hiphop framework 16
4.1.3 Phân trang với Pagination class 33
4.1.4 Quản lý Session PHP với session class 34
4.1.5 Tạo hình ảnh Captcha với Captcha class 35
4.1.6 Tải file lên server với Upload class 36
4.1.7 Tải file với giao thức FTP - FTP class 36
Trang 7DANH SÁCH CÁC HÌNH ẢNH
Hình 1 1: Mô hình MVC 9
Hình 1 2: Biểu đồ tuần tự một chuỗi MVC đơn giản 9
Hình 2 1: Mô hình MVC được áp dụng trong Hiphop framework 10
Hình 2 2: Cấu trúc cây thư mục Hiphop framework 17
Hình 2 3: Quy trình xử lý một HTTP request - Hiphop framework 18
Hình 2 4: Mô phỏng cấu trúc các thành phần cốt lõi trong Hiphop framework 19
Hình 3 1: Ví dụ một URL Hiphop framework 24
Hình 3 2: Minh họa Sơ đồ phân cấp controller trang web 26
Hình 3 3: blogview.php 28
Hình 3.4: header_view.php 28
Hình 5 1: Giao diện Blog 41
Trang 8LỜI MỞ ĐẦU
Trong những năm gần đây, các ứng dụng web lớn liên tục được tạo ra, đánh dấu nhữngbước phát triển nhảy vọt về công nghệ trong thế giới lập trình Các nền tảng hộ trợ lậptrình cũng được xây dựng hàng loạt nhằm mục đích chính là cải thiện tốc độ thực thi vànâng cao tính bảo mật cho các ứng dụng web Các nền tảng hỗ trợ lập trình ứng dụng(application framework) đều chứa đựng các kinh nghiệm của các nhà kiến trúc phần mềmsau nhiều năm chiêm nghiệm trong thế giới lập trình
Với nỗ lực làm giảm thời gian phát triển một ứng dụng web, bằng việc học hỏi và tiếp thunhững ưu điểm của các framework hiện nay, chúng tôi đã xây dựng được một nền tảng hỗtrợ lập trình các ứng dụng web được viết bằng ngôn ngữ PHP Khóa luận này trình bàycác khái niệm cần thiết trước khi bắt tay xây dựng một nền tảng lập trình, đồng thời giớithiệu nền tảng mà chúng tôi đã xây dựng thành công
Trang 9CHƯƠNG 1: KHÁI NIỆM VỀ WEB APPLICATIONFRAMEWORK VÀ MÔ HÌNH MVC
1.1 Web Application Framework là gì?
“Web application framework” là một nền tảng phần mềm được thiết kế để hỗ trợ việcphát triển các website động, các ứng dụng web và các dịch vụ web Mục đích củaFramework là nhắm tới việc giảm bớt các hao phí liên quan tới các hoạt động thực hiệntrong quá trình phát triển web Ví dụ, nhiều framework cung cấp thư viện để truy cập cơsở dữ liệu, khung khuôn mẫu và quản lý phiên làm việc, thêm vào đó làm tăng khả năngtái sử dụng mã.
1.2 PHP Framework
PHP framework là web framework được viết bằng PHP - một ngôn ngữ lập trình nguồnmở phổ biến nhất hiện nay Nội dung khóa luận đề cập tới PHP Framework là do PHP làngôn ngữ rất linh hoạt, được các lập trình viên ưa chuộng sử dụng khi tiến hành xây dựngcác ứng dụng web cỡ lớn (Facebook, Flickr, Twitter…) Bên cạnh đó PHP có một cộngđồng sử dụng lớn, luôn biết hỗ trợ lần nhau Nhưng chính tính linh hoạt, dễ học, dễ sửdụng của PHP đôi khi làm các lập trình viên chủ quan, thường chỉ chú ý tới việc ứng dụngcủa mình chạy được hay không mà không quan tâm tới tính sáng sủa trong việc tổ chứcmã phục vụ cho mục đích bảo trì dài lâu Chưa kể tới việc vấn đề an toàn, bảo mật choứng dụng web ngày càng bị xem nhẹ Đây là lúc họ cần tới một PHP framework.
Sự có mặt của PHP framework làm cho việc phát triển ứng dụng web trở nên trôi chảyhơn bằng việc cung cấp một cấu trúc cơ bản để xây dựng những ứng dụng đó Hay nóicách khác, PHP Framework giúp đỡ các lập trình viên thúc đẩy nhanh chóng quá trìnhphát triển ứng dụng, tiết kiệm được phần lớn thời gian, tăng sự ổn định cho ứng dụng, vàđặc biệt là giảm thiểu số lần phải viết lại mã Không chỉ thể, các framework còn đặc biệthữu ích với những lập trình viên ít kinh nghiệm, giúp họ có thể xây dựng các ứng dụngmang tính chuẩn hóa hơn nhờ việc tương tác chính xác giữa việc xử lý cơ sở dữ liệu(database), mã PHP và giao diện (HTML) một cách riêng biệt.
Các PHP framework hiện nay hầu hết đều cung cấp sẵn các module nền tảng cần thiết vàthư viện mã lệnh chuẩn (kết nối database, quản lý session, template engine…) để xâydựng ứng dụng.
Trang 10Ý tưởng chung đằng sau kiến trúc của một PHP Framework được kể đến là mô hình
MVC Một mô hình không mới nhưng mang lại nhiều cảm hứng cho các chuyên gia lập
trình trong nhiều năm qua Chúng ta sẽ cùng tìm hiểu các khái niệm và đặc điểm của môhình M-V-C.
1.3 MVC là gì?
MVC là chữ viết tắt của Model-View-Controller, một mẫu kiến trúc (architectural
pattern) được tạo ra nhằm giải quyết các vấn đề phát sinh cũng như các giải pháp tổ chứcmã trong quá trình phát triển phần mềm Khi sử dụng đúng cách, mẫu MVC giúp chongười phát triển phần mềm cô lập các nguyên tắc nghiệp vụ và giao diện người dùng mộtcách rõ ràng hơn Phần mềm phát triển theo mẫu MVC tạo nhiều thuận lợi cho việc bảotrì vì các nguyên tắc xử lý nghiệp vụ và giao diện ít có liên quan với nhau.
1.3.1 Lịch sử MVC
Bắt đầu vào những năm 70 của thế kỷ 20, tại phòng thí nghiệm Xerox PARC ở Palo Alto.Sự ra đời của giao diện đồ họa (Graphical User Interface) và lập trình hướng đối tượng(Object Oriented Programming) cho phép lập trình viên làm việc với những thành phầnđồ họa như những đối tượng đồ họa có thuộc tính và phương thức riêng của nó Khôngdừng lại ở đó, những nhà nghiên cứu ở Xerox PARC còn đi xa hơn khi cho ra đời cái gọilà kiến trúc MVC (viết tắt của Model – View – Controller) Kiến trúc MVC đã được ứngdụng để xây dựng rất nhiều thư viện đồ họa khác nhau Tiêu biểu là bộ thư viện đồ họacủa ngôn ngữ lập trình hướng đối tượng SmallTalk (cũng do Xerox PARC nghiên cứu vàphát triển vào thập niên 70 của thế kỷ 20) Ngày nay, trong nhiều các nền tảng lập trìnhchúng ta thấy sự có mặt của mô hình MVC, có thể kể đến:
+ Swing Components của Java
+ Document View Architecture trong Microsoft Visual C++ (VC++) + QT4(KDE)
+ Apple’s Cocoa (Core Data)
Trang 111.3.2 Vai trò của các thành phần M-V-C trong Web framework
Hình 1.0.1 Mô hình MVC
a C - Controller
Controller là các lớp điều khiển luồng ứng dụng, tiếp nhận yêu cầu người dùng thông quaHTTP header, sau đó chuyển tiếp nó đến các lớp phụ trách trực tiếp xử lý yêu cầu Tùytheo cách thiết kế lớp mà chúng ta thường thấy Controller gồm:
+ Front Controller Là một controller xử lý tất cả các yêu cầu người dùng cho website.
Fron Controller có nhiệm vụ hợp nhất tất cả các xử lý yêu cầu vào một kênh yêu cầuthông qua một đối tượng.
+ Dispatcher: Lớp điều phối hướng các điều khiển đi mức cao hơn+ Request: xử lý một phần dữ liệu đầu vào ở mức GET, POST+ Session: xử lý một phần dữ liệu đầu vào ở mức SESSION
Tùy theo dữ liệu đầu vào, Controller sẽ thực hiện các phép lọc (với dịch vụ lấy từ Model),các tính toán lựa chọn (Action Mapping) dựa trên kiến trúc và cấu hình nhằm xác địnhthành phần lớp chính sẽ thực hiện yêu cầu của người dùng Hiểu một cách đơn giản,Controller là thành phần trung gian giữa View và Model Nó nhận dữ liệu nhập vào quaView, sau đó gọi Model tương ứng rồi lấy kết quả trả về từ Model này Tiếp theo, mộtView thích hợp sẽ được lựa chọn Controller sẽ chuyển tiếp dữ liệu vào view để nó xử lý.Một số hoạt động thường thấy của Controller:
Tạo form, gửi tin nhắn đến form để yêu cầu kiểm tra dữ liệu
Trang 12 Tạo các dịch vụ liên quan đến nghiệp vụ ứng dụng, yêu cầu các lớp dịch vụ tươngtác với nguồn dữ liệu để trả về hay thay đổi trạng thái dữ liệu: thực hiện các thao tácchuyển đổi dữ liệu, kiểm tra quyền truy cập trên một hoạt động cụ thể, tương tácvới database, tương tác với các web services.
Tạo đối tượng view, gán các nguồn dữ liệu lấy được từ đối tượng dịch vụ vào choview.
b M - Model
Model là các lớp cung cấp dữ liệu, dịch vụ liên quan đến dữ liệu và các vấn đề xử lý logicnghiệp vụ Model có thể:
Đánh giá tính hợp lệ của dữ liệu.
Ví dụ kiểm tra dữ liệu vào có đúng với nguyên tắc của hệ thống không
Chuyển đổi dữ liệu Ví dụ chuyển đổi định dạng file, chuyển đổi tỉ giá, chuyển đổingôn ngữ…
Đưa ra quyết định về nghiệp vụ Ví dụ đưa ra các dữ liệu, lời khuyên tư vấn đầu tưdựa trên dữ liệu đầu vào của người dùng và các dữ liệu đang có
Thực hiện việc xử lý dữ liệu theo một quy trình
Do có hai vai trò tương đối tách biệt cho nên một Model thường được tách thành các lớpcó các vùng xử lý khác biệt:
Vùng xử lý Logic nghiệp vụ: thường là xử lý rule hay policy của nghiệp vụ cũngnhư quy trình nghiệp vụ
Vùng xử lý dữ liệu: Cung cấp/lưu trữ dữ liệu và việc chuyển đổi dữ liệu thành cácdạng khác nhau theo yêu cầu
Trong các tình huống đơn giản, Model chỉ làm vài thao tác đơn giản như lấy dữ liệu từdatabase Trong các tình huống phức tạp, việc xử lý có thể là tổ hợp của hàng trăm lớpdiễn ra trên một hoặc vài máy chủ (server) hoặc thậm chí dữ liệu hay quyết định được đưara từ Model lại là tổng hợp kết quả từ một vài trung tâm dữ liệu nằm rải rác trên vài lụcđịa Do vậy trong Model không chỉ có các thao tác trên database và có còn là file system,memory, networking I/O
Model hoạt động như là một tầng dịch vụ nhằm có thể tái sử dụng giữa các Controller
Trang 13Khi Controller gọi Model thông qua các giao diện lập trình (API) của Model, nó cần biếtmột số ứng xử chung của Model Ví dụ:
Cách Model đó gửi tín hiệu về quá trình nó xử lý yêu cầu Có hay không có lỗingoại lệ, kiểu của lỗi ngoại lệ, lỗi trong trường hợp nào
Kiểu trả veef cần mang tính nhất quán
Bản thân View cũng là một tổ hợp của nhiều lớp Và nó cũng có thể có View con để giảmtải trên một số lớp chính và để sử dụng lại mã Và do vậy tính logic của View có thể làlogic của một cây phân cấp.
Trong mô hình truyền thống, View có trách nhiệm chuyển đổi dữ liệu hay trạng thái củaModel thành cấu trúc trực quan Do vậy dữ liệu của Model cần được định nghĩa một cáchhợp lý Sự tách biệt của hai thành phần này sẽ giúp cho người lập trình phân định đượcmột biên giới rõ ràng giữa cách thức lưu trữ/lấy dữ liệu và cách trình bày dữ liệu Do vậytính phức tạp của quy trình lấy dữ liệu, xử lý dữ liệu cũng như (sự thay đổi của chúngtheo thời gian) trước khi trả về sẽ không làm ảnh hưởng đến việc trình bày dữ liệu Rõràng sự khác biệt về công nghệ lấy dữ liệu và công nghệ sinh trang không gây ảnh hưởngđến ứng dụng Điều này khá quan trọng trong việc tích hợp các ứng dụng Ngoài ra, cáchlàm này thực sự đảm bảo việc tách biệt vai trò của người thiết kế giao diện với vai trò củalập trình viên thiên về dữ liệu Như vậy khi làm việc theo nhóm, người quản trị dự án cóthể tổ chức nhóm phát triển thành các nhóm kĩ năng và phát triển ứng dụng song song vớinhau.
Các công nghệ thường được sử dụng ở View là HTML, CSS và JavaScript.
Trang 14Hình 1.0.2 Biểu đồ tuần tự một chuỗi MVC đơn giản
Tóm lại, MVC chia trách nhiệm công việc thành ba phần riêng rẽ:
Phát triển (development): Các nhà phát triển làm việc với model Đặc trưng của phần
này là tận dụng một cách triệt để kiến thức, kỹ năng của các lập trình viên liên quantới thuật toán xử lý dữ liệu, quản trị cơ sở dữ liệu
Thiết kế (design): Các nhà thiết kế làm việc trực tiếp với lớp View, chịu trách nhiệm
tạo ra "cảm quan" cho ứng dụng Họ cần có kinh nghiệm làm việc với HTML, CSS,JavaScript và Graphic Design
Hợp nhất (intergration): phần này tồn tại trong lớp Controller Mục đích chính là gắn
kết developer và designer với nhau Người hợp nhất không cần có nhiều kinh nghiệmlàm việc với dữ liệu như lập trình viên nhưng cần nắm rõ cách tổ chức của một ứngdụng.
Mô hình MVC được áp dụng rất nhiều trong các Web framework hiện nay Các PHPframework phổ biến nhất:
Zend framework: là sản phẩm của Zend – công ty “bảo trợ” cho PHP Với các
tính năng mạnh mẽ, Zend framework thường được sử dụng cho các công ty lớn, vàbạn cần phải có lượng kiến thức khá sâu rộng về PHP để có thể sử dụng được Zendframework.
CakePHP: là một lựa chọn tốt cho những lập trình viên có kiến thức nâng cao về
PHP Nó dựa trên cùng một nguyên tắc thiết kế với Ruby on Rails (một frameworkdành cho các nhà phát triển các ứng dụng web bằn ngôn ngữ Rail) Với các hệ
Trang 15thống hỗ trợ, tính đơn giản và mỗi trường mở cao đã giúp cho CakePHP trở thànhmột trong những framework phổ biến nhất hiện nay.
CodeIgniter: một MVC framework viết bằng PHP4 (gần đây đã tương thích hoàn
toàn với PHP 5.3.0 trong phiên bản 1.7.2) Được biết đến như một framework dễhiểu và dễ sử dụng CodeIgniter được Rasmus Lerdorf – cha đẻ của ngôn ngữ PHP– đánh giá rất cao vì tính tinh giản về cấu trúc, đạt hiệu năng cao khi vận hành.Không giống như Symfony, PHP framework này phục vụ mục đích lý tưởng choviệc xây dưng các ứng dụng chia sẻ, lưu trữ Nó cung cấp các giải pháp đơn giản,và có một thư viện video hướng dẫn phong phú, diễn đàn hỗ trợ, và cung cấp sẵnmột hướng dẫn sử dụng cho người mới bắt đầu PHP framework này rất phù hợpcho một người mới làm quen với framework.
Joomla! v1.5.x: một hệ quản trị nội dung nguồn mở được phát triển theo mô hình
MVC trong các phần mở rộng (extensions), bao gồm các thành phần (components)và các mô đun (modules)
Cảm thấy chưa thỏa mãn với mô hình hiện tại của các framework, chúng tôi đã nghiêncứu và phát triển được một framewok hoàn toàn mới, giải quyết được mọi yêu cầu trongcác bài toàn phát triển web
Trang 16CHƯƠNG 2 GIỚI THIỆU FRAMEWORK ĐÃ XÂY DỰNG2.1 Tổng quan về framework đã xây dựng
Sau một quá trình tìm tòi và phát triển, chúng tôi đã xây dựng được một PHP frameworkhoàn toàn mới, có nhiều ưu điểm so với các framework hiện nay Chúng tôi đặt tênframework này là Hiphop framework.
Hiphop framework là một PHP5 framework được viết ra nhằm mục đích tận dụng mọi ưuđiểm của mô hình MVC trong việc xây dựng các ứng dụng web động bằng ngôn ngữPHP Hiphop giúp các lập trình viên tạo nên các ứng dụng web có kiến trúc sáng sủa, dễbảo trì và dễ mở rộng Bên cạnh đó, Hiphop cho phép các nhà phát triển xây dựng mộtứng dụng web nhanh hơn rất nhiều so với việc viết mã thuần túy bằng cách cung cấp mộtbộ thư viện đầy đủ cho các tác vụ thông thường, cũng như cung cấp một mô hình tươngtác đơn giản và dễ hiểu cho việc kết nối tới những bộ thư viện đó.
Hiphop mang theo một triết lý riêng về tổ chức ứng dụng web từ mô hình MVC cho đếnkiến trúc phân cấp Controller Vì thế, Hiphop mang theo nhiều điểm khác biệt so với cácPHP framework đương đại.
Hình 2.0.3 Mô hình MVC được áp dụng trong Hiphop framework
Trang 17Các đặc điểm nổi bật của Hiphop framework bao gồm:
Tính dễ sử dụng (với cả các lập trình viên chưa có nhiều kinh nghiệm)
Kiến trúc MVC hiện đại: mô hình dữ liệu (Model), điều khiển ứng dụng(Controller), chức năng hiển thị (View)
Khả năng tổ chức ứng dụng thành các lớp Controller đa tầng, giúp ứng dụng có tínhmodule hóa
Tốc độ xử lý rất nhanh so với các PHP Framework đương đại nhờ kiến trúc kháthông minh và mã được tinh giản, tối ưu cao
Hệ thống lớp truy xuất Database mạnh mẽ, hỗ trợ tạo nhiều kết nối Database đến cácmáy chủ database khác nhau trên cùng một request.
Thư viện hỗ trợ caching
Mềm dẻo trong việc định tuyến URL (URL Routing)
Ngoài ra, Hiphop framework tích hợp thêm vào một số lớp thư viện mà các frameworkkhác chưa mặc định tích hợp:
Gửi Email, hỗ trợ đính kèm, HTML/Text email, đa giao thức (sendmail, SMTP, andMail) – Email Class
Thư viện chỉnh sửa ảnh (cắt ảnh, thay đổi kích thước, xoay ảnh, v.v ) – ImageClass
Đăng tải một file lên server – Upload Class
Tương tác với máy chủ thông qua giao thức FTP - FTP Class Phân trang tự động – Pagination Class
Nén file - Zip Encoding Class
Tạo ảnh Captcha - một loại kiểm thử dạng hỏi đáp được dùng trong máy tính để xácđịnh xem người dùng có phải là con người hay không - Captcha Class
Một lượng lớn các hàm hỗ trợ (helpers)
Bên cạnh đó là thư viện hàm hỗ trợ (helper) phong phú đi kèm.
Yêu cầu hệ thống khi sử dụng Hiphop framework:
Trang 18Để hệ thống vận hành được, yêu cầu tối thiểu sau cần được đáp ứng: Web server: Apache, Nginx, Lighttpd
Trang 192.2 Kiến trúc của Hiphop framework
2.2.1 Tổng quát về hệ thống thư mục trong Hiphop framework
Hình 2.0.4 Cấu trúc cây thư mục Hiphop framework
Application Nơi lưu trữ ứng dụng của bạn Chia làm ba thư mục con: Controller: chứa các Controller của ứng dụng
Trang 20 Model: chứa các Model của ứng dụng
View: chứa các View của ứng dụng
Config Chứa các file cấu hình hệ thống, gồm các thư mục:
Autoload: liệt kê các helper, library, model tự động load khi
ứng dụng khởi động
Database: cầu hình để kết nối với các database
Helper Nơi lưu trữ các hàm hỗ trợ lập trình tối ưu
Libraries Chứa các thư viện hỗ trợ xử lý các vấn đề nghiệp vụHiphop Chứa các lớp và hàm cốt lõi của Hiphop
Database Chứa các lớp xử lý truy xuất tới các hệ quản trị cơ sử dữ liệu khác nhau
2.2.2 Các thành phần cốt lõi
Trước hết ta cần tìm hiểu quy trình xử lý một HTTP request của ứng dụng viết bởi PHP framework Biểu đồ sau minh họa điều đó.
Hình 2.0.5 Quy trình xử lý một HTTP request - Hiphop framework
Bước 1 File index.php được dùng như một front controller, có nhiệm vụ khởi tạo các tài
nguyên cơ bản cần thiết cho việc chạy Hiphop framework.
Bước 2 Lớp Router kiểm tra HTTP requsest để xác nhận những việc phải làm.
Bước 3 Nếu file đệm (cache file) tồn tại, nó gửi trực tiếp nội dung cache file đó tới trình
duyệt Nếu không, Controller phù hợp với yêu cầu sẽ được gọi tiếp theo sau đó.
Bước 4 Các Controller nạp vào các model, các thư viện lõi (library), các hàm sử dụng và
bất kỳ tài nguyên khác cần cho việc xử lý một yêu cầu cụ thể.
Trang 21Bước 5 Cuối cùng thành phần View được tạo ra và được gửi trực tiếp tới trình duyệt.
Hình 2.0.6 Mô phỏng cấu trúc các thành phần cốt lõi trong Hiphop framework
Các thành phần cốt lõi tạo nên Hiphop framework:
a File index.php
Là file đầu tiên được gọi khi một yêu cầu người dùng được gửi tới hệ thống Nhiệm vụ
của file này là đọc giá trị biến route từ chuỗi truy vấn (query string), khởi tạo các lớp cơ
sở (Input, Output, Route, Registry) Sau đó gọi hàm call_user_func_array() trong PHP
Trang 22để chạy các hàm, lớp tương ứng với giá trị biến route Sau cùng là hàm >display() trả về cho trình duyệt chuỗi HTML do các View cung cấp (được gọi từController).
$output-b Class Input (system/libraries/Input.php)
Là lớp được khởi tạo mặc định trong file index.php Lớp này cung cấp các hàm hỗ trợ
việc lấy các input data: $_GET, $_POST, $_SERVER….
c Class Registry (system/hiphop/Registry.php)
Là một final class Registry được tạo ra nhằm quản lý toàn bộ các đối tượng đã được khởitạo từ các lớp cơ bản (Input, Output, DB,…) Registry class tận dụng kĩ thuật lập trìnhhướng đối tượng để đảm bảo việc tạo đối tượng chỉ diễn ra một lần trong toàn bộ chu kìsống của một yêu cầu (request).
Hình 2.0.7 Lớp Registry
d Router object (khởi tạo từ class Router trong system/libraries/Router.php)
Router là một đối tượng được khởi tạo khi Hiphop vận hành nhằm chuyển tiếp cấu trúcrequest dạng mảng $_GET do URL resolver sinh ra đến một lớp Controller Nó có vai tròtrung gian trong việc tiếp nhận thành phần request được chuẩn hóa từ URL resolver, phântích đặc tả quy ước, tìm kiếm lớp Controller có thể xử lý request và các thao tác xử lýkhác liên quan đến việc này.
Trang 23Hình 2.0.8 Lớp Router
e Output object (khởi tạo từ class Output trong system/libraries/Output.php)
Cũng là đối tượng được khởi tạo trong index.php với mục đích cập nhật luồng dữ liệuHTML được tạo ra từ các View.
Hình 2.0.9 Lớp Output
f Loader object (khởi tạo từ class Loader trong system/libraries/Loader.php)
Đóng vai trò là một biến của lớp Controller.
Hình 2.0.10 Lớp Loader
function view() Ghi nhận chuỗi HTML do View trả lại vào biến $output
function helper() Nạp các thư viện hàm hỗ trợ (helpers) được yêu cầu
function library() Nạp và khởi tạo các lớp thư viện được yêu cầu
function model() Tạo đối tượng từ lớp Model được yêu cầu
function database() Khởi tạo kết nối tới database (Cấu hình kết nối tới các