LỜI NÓI ĐẤUTrong 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ấunhững bước phát triển nhảy vọt về công nghệ trong thế giới lập trình.. Với nỗ lực làm giảm thời gia
Trang 1- -BÀI TẬP MÔN KỸ NGHỆ PHẦN MỀM
Giáo viên hướng dẫn: Th.s Nguyễn Đức Lưu
Trang 2LỜI NÓI ĐẤ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ấunhững bướ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ập trình cũng được xây dựng hàng loạt nhằm mục đích chính là cải thiệntố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ệmcủa các nhà kiến trúc phần mềm sau nhiều năm chiêm nghiệm trong thế giới lậptrì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 thu những ưu điểm của các mô hình tiên tiến hiện nay, các nhà phát triển đãxây dựng được một mô hình kiến trúc hỗ trợ lập trình các ứng dụng web được sửdụng phổ biến hiện nay không những trong ngôn ngữ PHP mà nó còn được sửdụng rất rộng rãi trong Java và các ngôn ngữ khác
Tiểu luận này sẽ giúp chúng ta tìm hiểu sâu thêm về kiến trúc mô hình MVC vàứng dụng của nó vào việc thiết kế các ứng dụng website Mà framework áp dụng ởđây là Cakephp, một framework rất mạnh trong việc ứng dụng mô hình MVC đểphát triển ứng dụng website
Cũng qua bài tập lần này nhóm chúng em xin cảm ơn Thạc sĩ Nguyễn Đức Lưu,thầy giáo bộ môn kỹ nghệ phần mềm đã trực tiếp dạy dỗ, chỉ bảo chúng em trongtoàn bộ môn học
Cuối cùng chúng em cũng xin cảm ơn tất cả các thầy cô giáo, bạn bè đẽ nhiệt tìnhgiúp đỡ chúng em hoàn thành tốt bài tập lần này
Trân trọng!
Trang 3MỤC LỤC
CHƯƠNG I TỔNG QUAN VỀ WEB APPLICATION FRAMEWORK VÀ MÔ HÌNH MVC 3
1.1 W EB A PPLICATION F RAMEWORK LÀ GÌ ? 3
1.2 PHP Framework 3
1.3 MVC là gì? 4
1.3.1 Lịch sử MVC 4
1.3.2 Vai trò của các thành phần M-V-C trong Web framework 5
1.4 H Ệ QUẢN TRỊ CSDL MYSQL 9
1.4.1.Giới thiệu về hệ quản trị CSDL MySql 9
1.4.2 Kết nối vào CSDL 10
1.4.3 Chọn CSDL để làm việc 11
1.4.4 Thực thi câu lệnh select và lấy kết quả trả về 11
1.4.5 Thực thi một câu lệnh insert, update hoặc delete 13
CHƯƠNG II TỔNG QUAN VỀ FRAMEWORK CAKEPHP 16
2.1 G IỚI THIỆU VỀ F RAMEWORK C AKE PHP 16
2.1.1.Một số tính năng của CakePHP 16
2.2.C ÀI ĐẶT C AKE PHP 17
2.2.1 Chuẩn bị và cài đặt 17
2.2.2 Cấu trúc thư mục CakePHP 19
2.3 K IẾN TRÚC C AKE PHP 20
CHƯƠNG III CÀI ĐẶT DEMO ỨNG DỤNG FRAMEWORK CAKEPHP VÀ MÔ HÌNH MVC 21
3.1 G IỚI THIỆU ỨNG DỤNG 21
3.2 C ÀI ĐẶT ỨNG DỤNG 21
3.2.1 Cấu hình 21
3.3 G IAO DIỆN NGƯỜI DÙNG 23
3.3.1.Giao diện trang chủ 23
3.3.2 Giao diện trang liên hệ 23
3.3.3 Giao diện mua hàng 24
3.3.4 Giao diện tin tức 25
3.3.5 Giao diện hỗ trợ trực tuyến 26
3.3.6 Các giao diện khác 26
3.4 G IAO DIỆN QUẢN TRỊ 27
3.4.1 Giao diện đăng nhập 27
3.4.2 Giao diện quản lý danh mục và thêm danh mục 27
3.4.3 Quản lý sản phẩm và thêm sản phẩm 28
3.4.4 Giao diện quản lý tin tức và thêm mới tin 29
3.4.5 Quản lý hóa đơn 30
3.4.6 Quản lý thông tin chung website 31
3.5 K ẾT QUẢ THU ĐƯỢC , HẠN CHẾ 31
CHƯƠNG IV TỔNG KẾT 33
CHƯƠNG V TÀI LIỆU THAM KHẢO 34
Trang 4CHƯƠNG I TỔNG QUAN VỀ WEB APPLICATION
FRAMEWORK 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ệc phát triển các website động, các ứng dụng web và các dịch vụ web Mục đíchcủa Framework là nhắm tới việc giảm bớt các hao phí liên quan tới các hoạt độngthực hiện trong 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êmvào đó làm tăng khả năng tái sử dụng mã
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ôichảy hơ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ói cách khác, PHP Framework giúp đỡ các lập trình viên thúc đẩy nhanhchóng quá trình phá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ệt hữ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ụng mang tính chuẩn hóa hơn nhờ việc tương
Trang 5tá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ầnthiết và thư viện mã lệnh chuẩn (kết nối database, quản lý session, templateengine…) để xây dựng ứng dụng
Ý 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áiniệ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ức mã trong quá trình phát triển phần mềm Khi sử dụng đúngcách, mẫu MVC giúp cho ngườ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ột cách rõ ràng hơn Phần mềm phát triển theo mẫuMVC tạo nhiều thuận lợi cho việc bảo trì 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ìnhhướng đối tượng (Object Oriented Programming) cho phép lập trình viên làm việcvớ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ông dừng lại ở đó, những nhà nghiên cứu ở XeroxPARC còn đi xa hơn khi cho ra đời cái gọi là kiến trúc MVC (viết tắt của Model –View – Controller) Kiến trúc MVC đã được ứng dụ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ọa của ngôn ngữ lập trìnhhướng đối tượng SmallTalk (cũng do Xerox PARC nghiên cứu và phát triển vàothập niên 70 của thế kỷ 20) Ngày nay, trong nhiều các nền tảng lập trình chúng tathấ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++)
Trang 6+ QT4(KDE)
+ Apple’s Cocoa (Core Data)
1.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ùngthông qua HTTP 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ùy theo 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ộtkênh yêu cầu thô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ìnhnhằm xác định thành phần lớp chính sẽ thực hiện yêu cầu của người dùng Hiểu
Trang 7mộ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 qua View, sau đó gọi Model tương ứng rồi lấy kết quả trả
về từ Model này Tiếp theo, một View 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
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ương tác với nguồn dữ liệu để trả về hay thay đổi trạng thái dữ liệu: thựchiện các thao tác chuyể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ác vớ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 cho view
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ý logic nghiệ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 đổi ngô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ànhcác lớp có 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ũng như 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ệuthành các dạng khác nhau theo yêu cầu
Trang 8Trong 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ớp diễ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 đưa ra 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ácController
Khi Controller gọi Model thông qua các giao diện lập trình (API) của Model, nócần biết mộ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ỗi ngoạ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ảm tả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ủaView 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ạngthái của Model thành cấu trúc trực quan Do vậy dữ liệu của Model cần được địnhnghĩa một cách hợp lý Sự tách biệt của hai thành phần này sẽ giúp cho người lậptrình phân định được mộ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ậy tính phức tạp của quy trình lấy dữ liệu, xử lý dữ
Trang 9liệu cũng như (sự thay đổi của chúng theo 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ách làm này thực sự đảmbảo việc tách biệt vai trò của người thiết kế giao diện với vai trò của lập trình viênthiê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 songvới nhau.
Các công nghệ thường được sử dụng ở View là HTML, CSS và JavaScript
Hì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ìnhviên liên quan tớ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ớiHTML, 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
Trang 10kinh nghiệm là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 ứng dụng.
Mô hình MVC được áp dụng rất nhiều trong các Web framework hiện nay CácPHP framework 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áccô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 Zend framework
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 framework dành cho các nhà phát triển các ứng dụng web bằn ngônngữ Rail) Với các hệ thống hỗ trợ, tính đơn giản và mỗi trường mở cao đãgiúp cho CakePHP trở thành một trong những framework phổ biến nhấthiệ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, PHPframework này phục vụ mục đích lý tưởng cho việc xây dưng các ứng dụngchia sẻ, lưu trữ Nó cung cấp các giải pháp đơn giản, và có một thư việnvideo hướng dẫn phong phú, diễn đàn hỗ trợ, và cung cấp sẵn một hướngdẫn sử dụng cho người mới bắt đầu PHP framework này rất phù hợp chomộ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ànhphần (components) và các mô đun (modules)
1.4 Hệ quản trị CSDL MYSQL
1.4.1.Giới thiệu về hệ quản trị CSDL MySql
Trang 11Mysql là hệ quản trị dữ liệu miễn phí, được tích hợp sử dụng chung với apache,PHP Chính yếu tố phát triển trong cộng đồng mã nguồn mở nên mysql đã qua rấtnhiều sự hỗ trợ của những lập trình viên yêu thích mã nguồn mở Mysql cũng cócùng một cách truy xuất và mã lệnh tương tự với ngôn ngữ SQL Nhưng Mysqlkhông bao quát toàn bộ những câu truy vấn cao cấp như SQL Về bản chất Mysqlchỉ đáp ứng việc truy xuất đơn giản trong quá trình vận hành của website nhưnghầu hết có thể giải quyết các bài toán trong PHP.
PHP cung cấp hàm mysql_connect để kết nối vèo MySQL server Cú pháp của
hàm này như sau:
mysql_connect($server_address, $username, $password)
$server_address là địa chỉ của MySQL server, có thể là domain name hoặc IP
address, các ví dụ trong bài viết này sẽ dùng giá trị "localhost" cho
$server_address
$username là tên account dùng để login vào MySQL server, các ví dụ trong bài sẽ
sử dụng giá trị "root" cho $username.
$password là mật mã để kết nối vào MySQL server, các ví dụ trong bài viết sẽ sử
dụng chuỗi rỗng "" làm mật mã
Hàm mysql_connect sẽ trả về 1 kết nối đến MySQL server nếu như quá trình kết nối thành công, hoặc trả về giá trị FALSE nếu như kết nối không được
Để đóng kết nối tới MySQL server, PHP cung cấp hàm mysql_close Đoạn mã sau
ví dụ quá trình kết nối vào MySQL server và đóng kết nối
Trang 12if ( !$conn ) {
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server");
mysql_select_db($db_name[, $conn])
Với $db_name là tên CSDL cần chọn, $conn là kết nối được thực hiện qua lệnh
mysql_connect Các ví dụ trong bài viết này sẽ sử dụng CSDL có tên là test:
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server");
1.4.4 Thực thi câu lệnh select và lấy kết quả trả về
PHP cung cấp cho ta 3 hàm hữu dụng để thực hiện công việc này:
Trang 13 $result = mysql_query($sql, $conn): thực hiện câu lệnh SQL được cung cấpqua tham số $sql và trả về 1 kết quả kiểu $result (hàm này trả về FALSE nếu như câu lệnh thực hiện không thành công)
mysql_num_rows($result): hàm này trả về số lượng row lấy được qua câu lệnh SELECT (được thực thi bởi hàm mysql_query) trước đó
$row = mysql_fetch_row($result), $row = mysql_fetch_assoc($result): trả
về dòng kết quả hiện thời của câu lệnh select và chuyển con trỏ tới dòng tiếp theo (như vậy lệnh gọi mysql_fetch_row hoặc mysql_fetch_assoc tiếp
đó sẽ trả về dòng tiếp theo); hoặc giá trị FALSE nếu như không còn dòng nào để trả về nữa Kết quả trả về từ 2 hàm này là 1 array
mysql_error($conn): trả về thông báo lỗi của MySQL server nếu như một lệnh trước đó có lỗi
Để hiểu rõ hơn công dụng của các hàm trên, đồng thời phân biệt sự khác nhau giữa 2 hàm mysql_fetch_row và mysql_fetch_assoc, ta cung xem xét các ví dụ sau
Các ví dụ của ta sẽ sử dụng table có tên là member với các trường và dữ liệu như sau:
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server:
".mysql_error($conn));
Trang 14} //end if
//chọn CSDL để làm việc
mysql_select_db($DBNAME, $conn)
or die("Không thể chọn được CSDL:
".mysql_error($conn));
$sql = "SELECT * FROM member";
$result = mysql_query($sql, $conn);
while ( $row = mysql_fetch_row($result) ) {
echo "Username = ".$row[0]."<br>\n";
echo "Password = ".$row[1]."<br>\n";
Trang 15Hàm mysql_query cũng được dùng để thực thi các câu lệnh DELETE, INSERT
hoặc UPDATE, nhưng lúc này hàm sẽ trả về TRUE nếu câu lệnh thực hiện thành công và FALSE trong trường hợp ngược lại Để lấy số lượng các row được chèn với lệnh INSERT hoặc bị thay đổi bởi lệnh UPDATE, PHP cung cấp cho ta hàm mysql_affected_rows Ta hãy xem ví dụ sau:
//Không kết nối được, thoát ra và báo lỗi
die("không nết nối được vào MySQL server:
".mysql_error($conn));
} //end if
//chọn CSDL để làm việc
mysql_select_db($DBNAME, $conn)
or die("Không thể chọn được CSDL:
Trang 16$sql = "UPDATE member SET password='111' WHERE
$sql = "DELETE FROM member";
$result = mysql_query($sql, $conn); //xoá hết tất cả
Trang 17CHƯƠNG II TỔNG QUAN VỀ FRAMEWORK CAKEPHP
2.1 Giới thiệu về Framework CakePHP
CakePHP là một Framework cho php Mục đích của nó là cung cấp mộtframework cho người sử dụng php phát triển những ứng dụng web nhanh, mạnh
mẽ ,linh họa Và điều quan trọng là CakePHP là một OpenSource (miễn phí) Để
sử dụng nó, yêu cầu người làm phải biết những kiến thức như: Cơ bản về PHP vàHTML, Kiến trúc MVC,Lập trình hướng đối tượng
2.1.1.Một số tính năng của CakePHP
• Phân quyền (ACL)
• Kiểm tra ràng buộc dữ liệu
• Xây dựng nhiều thư viện hỗ trợ cho View như: Ajax, HTML Form, Javascript…
• Xây dựng nhiều thư viện hỗ trợ cho Controller: Email, Security, Session,
Cookies, Request Handling
• Dễ dàng viết thêm thư viện hỗ trợ, liên kết với ứng dụng khác (thông qua
vendors)
• Đa giao diện
• Hỗ trợ nhiều hệ quản trị CSDL
Trang 18- Giải nén, cho vào thư mục của web server
- Trong ví dụ này thư mục webser gốc là :C://xampp/htdocs
- Vậy ta có cấu trúc như sau :C://xampp/htdocs/cakephp