Tải bản đầy đủ (.pdf) (122 trang)

Đồ án tốt nghiệp Codeigniter Framework(Lập trình Web)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.9 MB, 122 trang )

Đồ án tốt nghiệp kỹ sư Trang 1 Ngành Công Nghệ Thông Tin

MỤC LỤC
CHƢƠNG 1 9
MỞ ĐẦU 9
1.1 Lý do chọn framework để phát triển ứng dụng website 9
1.2 Một số PHP Framework phổ biến hiện nay 11
1.2.1 CodeIgniter 11
1.2.2 Zend Framework 12
1.2.3 Yii Framework 13
1.2.4 CakePHP 13
1.2.5 Symfony 14
1.2.6 Prado 15
1.3 Lựa chọn PHP framework phù hợp 15
1.4 Bố cục của đồ án 16
1.5 Mục tiêu 16
CHƢƠNG 2 17
CÁC THÀNH PHẦN CỦA CODEIGNITER 17
2.1 Tổng quan về CodeIgniter 17
2.1.1 Những điểm nổi bật 17
2.1.1.1 Được thiết kế theo mô hình MVC (Model – View – Controller): 17
2.1.1.2 Tốc độ: 17
2.1.1.3 Nhẹ gọn: 17
2.1.1.4 Dễ sử dụng: 17
2.1.1.5 Thư viện phong phú: 18
2.1.1.6 Miễn phí: 18
2.1.1.7 Bảo Mật: 18
2.1.1.8 Search Engine Optimization: 18
2.1.2 Những điểm hạn chế 18
2.1.2.1 Chưa hổ trợ AJAX: 18
2.1.2.2 Chưa hổ trợ ORM: 18


2.1.2.3 Chưa hổ trợ Event-Driven Programming: 19
2.1.2.4 Chưa hổ trợ một số module thông dụng: 19
Đồ án tốt nghiệp kỹ sư Trang 2 Ngành công nghệ thông tin
2.1.3 Cấu trúc thư mục của CodeIgniter 19
2.1.4 Hoạt động của CodeIgniter 22
2.1.5 CodeIgniter URLs 22
2.1.6 Định tuyến URI (URI Routing) 24
2.1.7 Model 25
2.1.8 View 29
2.1.9 Controller 31
2.1.10 Chức năng Helper 34
2.1.11 Thư viện của CodeIgniter 35
2.1.11.1 Định nghĩa một thư viện mới 37
2.1.11.2 Thay thế một thư viện 38
2.1.11.3 Mở rộng một thư viện 38
2.2 Những thƣ viện chính 38
2.2.1 Thư viện Calendar 38
2.2.2 Thư viện Shopping Cart 42
2.2.3 Thư viện Email 48
2.2.4 Thư viện Form Validation 53
2.2.4.1 Thiết lập điều kiện kiểm tra 53
2.2.4.2 Xử lý lỗi 58
2.2.4.3 Các tiện ích của Form Validation 59
2.2.5 Thư viện Pagination 60
2.2.5.1 Tạo phân trang 60
2.2.5.2 Thiết lập cấu hình trong một tập tin 61
2.2.5.3 Tùy chọn trong Pagination 61
2.2.6 Thư viện Session 62
2.2.6.1 Cách thức hoạt động 62
2.2.6.2 Cài đặt 63

2.2.6.3 Thêm thông tin vào session 63
2.2.6.4 Xóa thông tin trong session 63
2.2.6.5 Xóa tất cả session 63
2.2.6.6 Lấy thông tin trong session 64
Đồ án tốt nghiệp kỹ sư Trang 3 Ngành công nghệ thông tin
2.2.6.7 Lưu session vào cơ sở dữ liệu 64
2.2.6.8 Thiết lập các tùy chọn 65
2.2.7 Thư viện Database 66
2.2.7.1 thiết lập thông tin cơ sở dữ liệu 66
2.2.7.2 Truy vấn cơ sở dữ liệu 67
2.2.7.3 Active Record 69
CHƢƠNG 3 75
CÁC KỸ THUẬT ÁP DỤNG ĐỂ XÂY DỰNG ỨNG DỤNG 75
3.1 Session 75
3.1.1 Lưu thông tin người dùng 75
3.1.2 So sánh hai sản phẩm 76
3.2 Phân trang 78
3.3 Xây dựng giỏ hàng 80
3.4 Gửi mail 81
3.5 Xử lý các lỗi không tìm thấy 82
CHƢƠNG 4 87
ỨNG DỤNG MINH HỌA 87
4.1 Thiết kế cơ sở dữ liệu 87
4.2 Kiến trúc ứng dụng 95
4.2.1 Models 95
4.2.2 Controller 96
4.2.3 Views 96
4.3 Sơ đồ Use case 97
4.3.1 Sơ đồ Use case của người dùng và thành viên 97
4.3.2 Sơ đồ Use case của Admin 98

4.4 Danh mục các chức năng của ứng dụng 99
4.4.1 Người dùng 99
4.4.2 Thành viên 104
4.4.3 Quản lý Admin 108
CHƢƠNG 5 119
KẾT LUẬN 119
Đồ án tốt nghiệp kỹ sư Trang 4 Ngành công nghệ thông tin
5.1 Đánh giá 119
5.1.1 Về lý thuyết 119
5.1.2 Về ứng dụng 119
5.2 Hƣớng phát triển và mở rộng của đồ án 120
5.2.1 Về lý thuyết 120
5.2.2 Về ứng dụng 121
5.3 Lời kết 121







Đồ án tốt nghiệp kỹ sư Trang 5 Ngành công nghệ thông tin
DANH MỤC TỪ VIẾT TẮT
 HTTP…………………………………………… Hypertext Transfer Protocol
 MVC…………………………………………… Model – View - Controller
 ORM…………………………………………… Object-Relational Mapping
 PHP……………………………….…………… PHP Hypertext Preprocessor
 SQL…………………………………………… Structured Query Language
 URI…………………………………………… Uniform Resource Identifier
 URL…………………………………………… Uniform Resource Location

 XML………………………………………… Extensible Markup Language
 XSS…………………………………………………… Cross Site Scripting
Đồ án tốt nghiệp kỹ sư Trang 6 Ngành công nghệ thông tin
DANH MỤC CÁC BẢNG
Bảng 2-1 Danh sách thư viện của CodeIgniter 35
Bảng 2-2 Bảng thiết lập giá trị của thư viện Calendar 40
Bảng 2-3 Bảng thiết lập giá trị của thư viện Email 49
Bảng 2-4 Bảng thiết lập giá trị của thư viện Form Validation 54
Bảng 2-5 Bảng các hàm xử lý trong thư viện Form Validation 55
Bảng 2-6 Bảng thiết lập giá trị trong thư viện Session 65
Bảng 2-7 Bảng thiết lập cấu hình trong tập tin database.php 66
Bảng 4-1 sản phẩm ( ci_sanpham ) 88
Bảng 4-2 Đánh giá sản phẩm (ci_danhgia ) 89
Bảng 4-3 Nhà sản xuất ( ci_hang ) 89
Bảng 4-4 loại sảm phẩm ( ci_loai ) 89
Bảng 4-5 tài khoản Admin ( ci_admin ) 89
Bảng 4-6 tài khoản thành viên ( ci_member ) 90
Bảng 4-7 quản lý website ( ci_website ) 90
Bảng 4-8 tỉnh/thành phố (ci_tinhtp ) 91
Bảng 4-9 hóa đơn ( ci_hoadon ) 91
Bảng 4-10 chi tiết hóa đơn (ci_chitiet_hoadon ) 91
Bảng 4-11 thông tin hóa đơn ( ci_guest ) 91
Bảng 4-12 tin tức ( ci_bantin ) 92
Bảng 4-13 khuyến mãi ( ci_khuyenmai ) 92
Bảng 4-14 quản lý quảng cáo ( ci_quangcao ) 93
Bảng 4-15 quản lý slideshow ( ci_slideshow ) 93
Bảng 4-16 loại linh kiện và giá ( ci_timkiem ) 93
Bảng 4-17 danh sách linh kiện và giá ( ci_giatri_tk ) 93
Bảng 4-18 Session ( ci_sessions ) 93
Bảng 4-19 danh sách tài khoản mail website (ci_send_mail ) 94

Bảng 4-20 danh sách ứng dụng mail của website ( ci_ungdung_mail ) 94
Bảng 4-21 danh sách mail của người dùng ( ci_nhanmail ) 94
Bảng 4-22 quản lý liên hệ trực tuyến ( ci_lienhe_online ) 94
Bảng 4-23 danh sách thư liên hệ ( ci_lienhe_offline ) 95


Đồ án tốt nghiệp kỹ sư Trang 7 Ngành công nghệ thông tin
DANH MỤC CÁC HÌNH
Hình 1-1 Mô hình MVC 10
Hình 1-2 CodeIgniter Framework 11
Hình 1-3 Zend Framework 12
Hình 1-4 Yii Framework 13
Hình 1-5 CakePHP Framework 13
Hình 1-6 Symfony Framework 14
Hình 1-7 Prado Framework 15
Hình 2-1 Cấu trúc của CodeIgniter 19
Hình 2-2 Dòng chảy dữ liệu trong CodeIgniter 22
Hình 2-3 Lịch bắt đầu vào ngày thứ bảy 40
Hình 2-4 Lịch dạng đầy đủ 41
Hình 3-1 Sơ đồ hoạt động quá trình đăng nhập của người dùng 75
Hình 3-2 Quá trình hoạt động của so sánh 2 sản phầm 77
Hình 3-3 Mô tả phân trang 78
Hình 3-4 Quán trình thêm sản phẩm vào giỏ hàng 80
Hình 4-1 Lược đồ cơ sở dữ liệu 87
Hình 4-2 Sơ đồ kiến trúc Models của ứng dụng 95
Hình 4-3 Sơ đồ kiến trúc Controllers của ứng dụng 96
Hình 4-4 Sơ đồ kiến trúc Views của ứng dụng 96
Hình 4-5 Sơ đồ Use Case của người dùng và thành viên 97
Hình 4-6 Sơ đồ Use Case của Admin 98
Hình 4-7 Danh sách nhà sản xuất và số sản phẩm của nhà sản xuất đó 99

Hình 4-8 Danh sách sản phẩm mới nhất 99
Hình 4-9 Chi tiết sản phẩm 100
Hình 4-10 Đánh giá sản phẩm 100
Hình 4-11 Nhận thông tin mới nhất qua mail 101
Hình 4-12 Form liên hệ 101
Hình 4-13 Tìm kiếm nâng cao 101
Hình 4-14 So sánh 2 sản phẩm 102
Hình 4-15 Thông tin giỏ hàng 103
Hình 4-16 Form đăng ký 103
Hình 4-17 Form lấy mật khẩu mới 103
Hình 4-18 Thông tin cá nhân và lịch sử giao dịch 104
Hình 4-19 Form cập nhật thông tin cá nhân 104
Hình 4-20 Form cập nhật mật khẩu 105
Hình 4-21 Form điền thông tin mua hàng 105
Hình 4-22 Hóa đơn mua hàng 106
Hình 4-23 In hóa đơn mua hàng 107
Hình 4-24 Form đăng nhập của Admin 108
Đồ án tốt nghiệp kỹ sư Trang 8 Ngành công nghệ thông tin
Hình 4-25 Giao diện quản lý của Admin 108
Hình 4-26 Quản lý doanh thu 109
Hình 4-27 Quản lý sản phẩm bán ra (chưa làm ) 109
Hình 4-28 Quản lý danh sách nhà sản xuất 110
Hình 4-29 Thêm nhà sản xuất 110
Hình 4-30 Quản lý sản phẩm 110
Hình 4-31 Thêm sản phẩm 111
Hình 4-32 Quản lý hóa đơn chưa thanh toán 111
Hình 4-33 Quản lý hóa đơn đã thanh toán 111
Hình 4-34 Quản lý hóa đơn chưa được kích hoạt 112
Hình 4-35 Quản lý thành viên 112
Hình 4-36 Thêm thành viên 112

Hình 4-37 Danh sách thành viên bị khóa 113
Hình 4-38 Quản lý liên hệ do khách hàng gửi 113
Hình 4-39 Chi tiết liên hệ của khách hàng và trả lời thư 113
Hình 4-40 Quản lý tin tức 114
Hình 4-41 Thêm tin tức 114
Hình 4-42 Quản lý tin tức khuyến mãi 114
Hình 4-43 Thêm tin tức khuyến mãi 115
Hình 4-44 Quản lý linh kiện 115
Hình 4-45 Chi tiết linh kiện 115
Hình 4-46 Quản lý cấu hình website 116
Hình 4-47 Quản lý tài khoản mail của website 116
Hình 4-48 Thêm tài khoản mail cho website 116
Hình 4-49 Quản lý ứng dụng gửi mail 116
Hình 4-50 Quản lý Slideshow 117
Hình 4-51 Quản lý quảng cáo 117
Hình 4-52 Quản lý liên hệ trực tuyến 117
Hình 4-53 Thêm liên hệ trực tuyến 118
Hình 4-54 Quản lý danh sách mail nhận thông tin mới nhất từ website 118
Hình 4-55 Form soạn thư để gửi đến danh sách mail đăng ký nhận thông tin 118


Đồ án tốt nghiệp kỹ sư Trang 9 Ngành công nghệ thông tin
CHƢƠNG 1
MỞ ĐẦU
 
1.1 Lý do chọn framework để phát triển ứng dụng website
Có lẽ thuật ngữ Framework không còn xa lạ gì đối với những người đã từng
học PHP, tuy nhiên vẫn có rất nhiều người không hiểu nó là cái gì, nó có gì và làm
được những gì… Và tại sao phần lớn các lập trình viên lựa chọn PHP Framework
làm ngôn ngữ lập trình ứng dụng web.

Như chúng ta đã biết, PHP (viết tắt hồi quy của PHP Hypertext
Preprocessor) là một ngôn ngữ script rất phổ biến hiện nay bởi những lý do: mã
nguồn mở, linh hoạt, công cụ mạnh mẽ, dễ học, dễ sử dụng và hoàn toàn miễn phí.
Lập trình viên có thể sử dụng PHP để tạo ra các trang web tin tức, giải trí, giáo dục,
thương mai điện tử…Tuy nhiên mã PHP mà lập trình viên tạo ra sẽ trở nên đơn
điệu, lủng củng, trùng lặp, đôi khi còn tạo ra các lỗ hổng cho website. Đó là lúc lập
trình viên cần đến PHP Framework.
Nói một cách dễ hiểu Framework là một thư viện, bộ khung chứa sẵn các
“vật liệu” ở nhiều lĩnh vực khác nhau, lập trình viên chỉ việc gọi ra sử dụng mà
không cần mất nhiều thời gian để tự thiết kế trước khi dùng. Ví dụ để thiết kế một
trò chơi đua xe, nếu không có bộ Framework chuyên dụng cho game thì người lập
trình game phải tạo ra khung xe, bánh xe, người lái, đường đi… Sau đó mới tính
đến chuyện ghép chúng lại với nhau để tạo ra không gian cho game. Nếu có sẵn bộ
Framework thì lập trình viên chỉ viết lệnh lấy chúng từ Framework và ghép chúng
lại. Có thể hình dung Framework bao gồm các vật liệu như gạch, cát, đá, xi măng,
nước, sắt… Nhưng tùy theo cách thiết kế của người kiến trúc sư mà tạo ra được
những căn nhà, trường học có hình dạng, kích thước khác nhau. Từ ví dụ trên có thể
thấy Framework là một thư viện dựng sẵn, chứa nhiều tập tin giúp lập trình có thể
tạo ra các ứng dụng khác nhau bằng cách lấy ra sử dụng mà không cần định nghĩa
lại.
PHP framework làm cho sự phát triển của các ứng dụng web viết bằng PHP
trở nên trôi chảy, ngắn gọn, mạnh mẽ và bảo mật hơn bằng cách 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
Đồ án tốt nghiệp kỹ sư Trang 10 Ngành công nghệ thông tin
cung cấp các tiện ích, thư viện, các đoạn mã dựng sẵn giúp lập trình viên tiết kiệm
được thời gian, tăng sự ổn định cho ứng dụng, tối ưu và giảm thiểu sự lặp đi lặp lại
các đoạn mã. Ngoài ra PHP framework có thể tương tác chính xác với cơ sở dữ liệu
(Database) và tách phần mã PHP ra khỏi giao diện giúp ứng dụng ổn định hơn và dễ
quản lý hơn. Điều này cho phép lập trình viên dành nhiều thời gian để tạo ra các
ứng dụng web hơn là phí thời gian để viết các đoạn mã lặp lại trong một ứng dụng

viết bằng PHP thuần.
PHP framework được thiết kế theo một mô hình chuẩn để lập trình viên có
thể dễ dàng sử dụng, quản lý và bảo trì ứng dụng. Đa số các frameword hiện nay
đều chọn MVC làm mô hình thiết kế ứng dụng. MVC là viết tắt của Model View
Controller cho phép tách biệt các mã nghiệp vụ (bussiness logic) và giao diện thành
các phần riêng biệt, điều này đồng nghĩa với việc ta có thể chỉnh sửa chúng một
cách riêng lẻ. Mô hình MVC gồm ba thành phần: Model, View và Controller.

Hình 1-1 Mô hình MVC
Trong đó:
Model (Tầng dữ liệu): là một đối tượng hoặc một tập hợp đối tượng biểu
diễn cho phần dữ liệu của ứng dụng. Model có nhiệm vụ tương tác đến dữ liệu trong
cơ sở dữ liệu, thường là các thao tác thay đổi dữ liệu như thêm, xóa, sửa, truy vấn
dữ liệu… Nếu dữ liệu trong Model thay đổi thì ngoài View sẽ được cập nhật lại.
View (Tầng giao diện): là thành phần thể hiện dữ liệu trong Model thành các
giao diện tương tác với người dùng. View cung cấp các menu, nút bấm, hộp đối
thoại,chọn lựa, các checkbox… để người dùng có thể thêm, xóa, sửa, truy xuất hay
Đồ án tốt nghiệp kỹ sư Trang 11 Ngành công nghệ thông tin
tìm kiếm dữ liệu trong hệ thống. Thông thường các thông tin hiển thị trên View
được lấy từ Model.
Controller (Tầng điều khiển): đóng vai trò trung gian giữa Model và View, là
tầng chịu trách nhiệm xử lý các tác động từ giao diện View. Sau khi xử lý các yêu
cầu được gửi từ người dùng Controller sẽ tương tác đến Model để lấy các dữ liệu
cần thiết để đáp ứng các yêu cầu vừa được gửi. Cuối cùng Controller trả dữ liệu này
về cho View.
Về căn bản MVC chi nhỏ quá trình xử lý của một ứng dụng, vì thế bạn có thể
làm việc trên từng phần riêng lẻ, trong khi những thành phần khác sẽ không bị ảnh
hưởng tới. Thực chất điều này giúp lập trình viên lập trình PHP nhanh hơn, ít phức
tạp hơn, dễ quản lý và bảo trì.
1.2 Một số PHP Framework phổ biến hiện nay

Trong vài năm qua, PHP đã tiến triển thành một ngôn ngữ script được lựa
chọn bởi hầu hết các nhà phát triển website, đã có sự bùng nổ về các PHP
framework, dẫn đến các cuộc tranh luận lớn về đề tài: PHP framework nào tốt nhất,
bởi vì thực tế không phải tất cả các framework đều được xây dựng trên khuôn khổ
dành cho người sử dụng. Dưới đây là một số PHP framework được đánh giá là tốt
và phổ biến nhất hiện nay:
1.2.1 CodeIgniter

Hình 1-2 CodeIgniter Framework
Đồ án tốt nghiệp kỹ sư Trang 12 Ngành công nghệ thông tin
CodeIgniter được biết đến như một framework dễ hiểu, dễ sử dụng, cho hiệu
suất cao và được cộng đồng mạng đánh giá là framework có tốc độ xử lý dữ liệu
nhanh nhất hiện nay. PHP framework này phục vụ mục đích lý tưởng cho việ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, có một thư
viện video hướng dẫn phong phú, diễn đàn hỗ trợ và cung cấp sẵn một hướng dẫn
đầy đủ, đơn giản cho người mới bắt đầu trong bộ cài đặt. PHP framework này rất
phù hợp cho người mới bắt đầu làm quen với framework.
Hiện nay CodeIgniter có phiên bản mới nhất là 2.0.2, download tại website:
Dung lượng: 2.15 mb.
1.2.2 Zend Framework

Hình 1-3 Zend Framework
Zend Framework có một cộng đồng phát triển rộng lớn, và nó tập trung vào
các ứng dụng web theo phong cách 2.0. Zend thường được sử dụng trong các công
ty lớn và người sử dụng framework này phải có lượng kiến thức khá sâu rộng về
PHP.
Hiện nay Zend Framework có phiên bản mới nhất là 1.11.7, download tại
website , Dung lượng bản đầy đủ là 25.72 mb.
Đồ án tốt nghiệp kỹ sư Trang 13 Ngành công nghệ thông tin
1.2.3 Yii Framework


Hình 1-4 Yii Framework
Yii là một PHP framework có hiệu suất cao cho việc phát triển ứng dụng
web 2.0. Không chỉ là MVC framework mà Yii còn là một framework hướng
component nên mức độ tái sử dụng giữa các dự án phát triển là rất cao. Không chỉ
vậy Yii còn có hiệu năng và tốc độ cao hơn Zend và Symfony…
Hiện nay Yii Framework có phiên bản mới nhất là 1.1.8, download tại
website Dung lượng là 2.50 mb.
1.2.4 CakePHP

Hình 1-5 CakePHP Framework
Đồ án tốt nghiệp kỹ sư Trang 14 Ngành công nghệ thông tin
CakePHP là một lựa chọn tuyệt vời 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.
CakePHP là một framework mạnh về khía cạnh rapid development, giúp lập trình
viên đẩy nhanh quá trình phát triển ứng dụng của họ. 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ất hiện nay.
Hiện nay cakePHP có phiên bản mới nhất là 1.3.10, download tại website
Dung lượng 1.42 mb.
1.2.5 Symfony

Hình 1-6 Symfony Framework
Symfony được ra đời nhằm mục đích giúp đỡ nâng cao hơn cho những lập
trình viên muốn tạo ra các ứng dụng website doanh nghiệp. Đây là một framework
mã nguồn mở với đầy đủ các tính năng cần thiết. Nhưng Symfony có vẻ chạy chậm
hơn so với các framework khác.
Hiện nay Symfony có phiên bản mới nhất là 1.4.12 (dự định tháng 7/2011 sẽ
cho ra mắt phiên bản 2.0 beta ), download bản 1.4.12 tại website
. Dung lượng 3.03 mb.

Đồ án tốt nghiệp kỹ sư Trang 15 Ngành công nghệ thông tin
1.2.6 Prado

Hình 1-7 Prado Framework
Prado là một framework lập trình hướng thành phần và hướng sự kiện dùng
trong lập trình web nhanh hơn trong PHP 5.Hỗ trợ tốt kỹ thuật AJAX,tuân thủ các
chuẩn XHTML cùa W3C.
Hiện nay Prado framework có phiên bản mới nhất là 3.1.2, download tại
website Dung lượng 16.95 mb.
1.3 Lựa chọn PHP framework phù hợp
Tùy theo sở thích, công việc… mà lập trình viên có thể tự chọn cho mình
một PHP framework phù hợp. Tuy nhiên để tạo được trang web có tốc độ xử lý
nhanh, mã code đơn giản, dễ hiểu, dễ cài đặt, có tính ứng dụng cao, được nhiều
người sử dụng thì CodeIgniter framework là một lựa chọn hợp lý.
CodeIgniter là một framework hoàn toàn miễn phí, được thiết kế theo mô
hình MVC giúp tách thành phần hiển thị giao diện và phần xử lý của một ứng dụng
thành các phần riêng biệt, từ đó việc quản lý, bảo trì trở nên dễ dàng hơn.
Framework này hỗ trợ khá đầy đủ các tiện ích thông dụng cho phép phát triển các
ứng dụng phổ biến nhất như gửi thư, quản lý session, giỏ hàng, xử lý ảnh, phân
trang… Nhưng để có thể thấy rõ được các tính năng của CodeIgniter thì việc xây
dựng một website thương mại điện tử là lựa chọn hợp lý nhất. Vì hầu hết các ứng
dụng website thương mại điện tử cần hội đủ các yếu tố giỏ hàng, session, gửi mail
thanh toán, phân trang… Đặc biệt là phải có tốc độ xử lý thông tin nhanh.
Đồ án tốt nghiệp kỹ sư Trang 16 Ngành công nghệ thông tin
1.4 Bố cục của đồ án
Đồ án bao gồm 5 chương:
 Chƣơng 1: Mở đầu
Nội dung của chương này trình bày lý do sử dụng framework để phát triển
ứng dụng website.Tại sao chọn CodeIgniter làm framework để lập trình ứng dụng
và xây dựng ứng dụng minh họa cho các chức năng của framework này .

 Chƣơng 2: Các thành phần của CodeIgniter
Nội dung chương 2 trình bày tổng quan về CodeIgniter. Giới thiệu các thành
phần có trong framework này và đi chi tiết vào các thành phần chính của
CodeIgniter.
 Chƣơng 3: Các kỹ thuật áp dụng để xây dựng ứng dụng
Nội dung chương 3 trình bày chi tiết các kỹ thuật áp dụng để xây dựng ứng
dụng như: session, phân trang, giỏ hàng, gửi mail…
 Chƣơng 4: Xây dựng ứng dụng minh họa
Nội dung chương này trình bày các chức năng trong ứng dụng, phân hệ
người dùng.
 Chƣơng 5: Kết luận
Nội dung chương 5 trình bày các kết quả đạt được và hướng phát triển của đề
tài.
1.5 Mục tiêu
Đây là đề tài thuộc hướng tìm hiểu framework và xây dựng ứng dụng. Mục
tiêu chính của đề tài là hỗ trợ lập trình viên biết cách sử dụng CodeIgniter
framework để tạo ra các ứng dụng website có các chức năng phổ biến hiện nay.
Đề tài bao gồm các phần sau:
 Tìm hiểu các thư viện, helper, plugin của CodeIgniter và cách sử dụng
các thư viện, helper đó.
 Tìm hiểu chi tiết những thư viện chính như: Shopping Cart, Form
Validation, Session, Email, Database, Pagination, Calendar.
 Xây dựng ứng dụng website thương mại điện tử bằng CodeIgniter
framework.

Đồ án tốt nghiệp kỹ sư Trang 17 Ngành công nghệ thông tin
CHƢƠNG 2
CÁC THÀNH PHẦN CỦA CODEIGNITER

2.1 Tổng quan về CodeIgniter

CodeIgniter là một nền tảng ứng dụng web mã nguồn mở được viết bằng
ngôn ngữ PHP bởi Rick Ellis (CEO của EllisLab, Inc). Phiên bản đầu tiên được phát
hành vào ngày 28/02/2006, hiện tại CodeIgniter đã được nâng cấp lên phiên bản
2.0.2 phát hành vào ngày 07/04/2011 và đang được phát triển bởi ExpressionEngine
Development Team thuộc EllisLab, Inc.
2.1.1 Những điểm nổi bật
2.1.1.1 Được thiết kế theo mô hình MVC (Model – View – Controller):
Mô hình MVC giúp tách thành phần hiển thị giao diện và phần xử lý của một
ứng dụng thành các phần riêng biệt, từ đó dễ quản lý, bảo trì và nâng cấp ứng
dụng.CodeIgniter đã sử dụng mô hình này để tách các tập tin giao diện ra khỏi các
tập tin xử lý dữ liệu để người thiết kế dễ dàng thay đổi giao diện, nâng cấp và bảo
trì website.
2.1.1.2 Tốc độ:
CodeIgniter là một trong những framework có tốc độ xử lý nhanh nhất hiện
nay (nguon). Với cơ chế lưu nội dung người dùng truy xuất vào bộ đệm (cache),
kiểm tra bộ đệm trước khi thực hiện, nếu tồn tại sẽ lấy ra ngược lại sẽ thực hiện gửi
yêu cầu người dùng. Như vậy sẽ làm giảm lượt truy cập đến cơ sở dữ liệu, tối ưu
hóa tốc độ.
2.1.1.3 Nhẹ gọn:
Phiên bản 2.02 ( có kèm hướng dẫn ) có dung lượng 2.15mb. Nhẹ hơn rất
nhiều so với các framework khác như Zend 6.02mb (bản chưa đầy đủ), Symfony
3.03mb…
2.1.1.4 Dễ sử dụng:
CodeIgniter khá thân thiện với người dùng, trong file download về có kèm
theo một bản hướng dẫn khá đầy đủ và ví dụ minh họa về từng phần, giải thích chi
tiết. CodeIgniter rất phù hợp với người mới làm quen với lập trình.
Đồ án tốt nghiệp kỹ sư Trang 18 Ngành công nghệ thông tin
2.1.1.5 Thư viện phong phú:
CodeIgniter hỗ trợ khá đầy đủ các tiện ích thông dụng cho phép phát triển
các ứng dụng phổ biến nhất như gửi thư, quản lý session, giỏ hàng, truy cập cơ sở

dữ liệu, xử lý ảnh … đến các chức năng bảo mật, mã hóa…
2.1.1.6 Miễn phí:
CodeIgniter được phát hành dưới giấy phép Apache/BSD mở rộng. Bạn có
thể tùy chỉnh, sửa đổi, copy, phát triển và phân phối mã nguồn. Tuy nhiên nên ghi
rõ nguồn gốc của CodeIgniter.
2.1.1.7 Bảo Mật:
CodeIgniter hổ trợ bộ lọc XSS (Cross Site Scripting), SQL Injection để lọc
dữ liệu từ POST và COOKIE để ngăn chặn các mã độc. Từ đó làm tăng khả năng
bảo mật cho CodeIgniter.
2.1.1.8 Search Engine Optimization:
Cấu trúc URL được tạo bởi CodeIgniter rất đơn giản và thân thiện. Thay vì
sử dụng các chuỗi truy vấn tiêu chuẩn tiếp cận đến các URL thì CodeIgniter sử
dụng một cách tiếp cận dựa vào các phân khúc (segment). Ví dụ:
example.com/news/article/345
2.1.2 Những điểm hạn chế
2.1.2.1 Chưa hổ trợ AJAX:
AJAX là thuật ngữ viết tắt của Asynchronous Javascript and XML (
Javascript và XML không đồng bộ). AJAX được sử dụng rất nhiều trên các ứng
dụng web nhằm tăng tính thân thiện và tiện lợi hơn cho trang web, nâng cao tính
tương tác giữa người và hệ thống, giúp người dùng có cảm giác như đang chạy ứng
dụng trên desktop. Hiện nay CodeIgniter vẫn chưa có thư viện hỗ trợ xây dựng ứng
dụng AJAX. Tuy nhiên lập trình viên có thể sử dụng các thư viện bên ngoài như
Jquery, Prototype hay Mootools…
2.1.2.2 Chưa hổ trợ ORM:
ORM là thuật ngữ viết tắt của Object-Relational Mapping là một phương
pháp lập trình để chuyển đổi từ mô hình database (cơ sở dữ liệu) sang mô hình
hướng đối tượng trong chương trình. ORM giúp mã nguồn ngắn gọn hơn và các
Đồ án tốt nghiệp kỹ sư Trang 19 Ngành công nghệ thông tin
thao tác trong cơ sở dữ liệu dễ dàng hơn. Hiện nay CodeIgniter vẫn chưa hổ trợ
ORM.

2.1.2.3 Chưa hổ trợ Event-Driven Programming:
Event-Driven Programming (lập trình hướng sự kiện) là một mô hình lập
trình trong đó các luồng xử lý của hệ thống được xác định bởi các sự kiện như nhấn
chuột, gõ bàn phím… Tuy nhiên đây không phải là một khuyết điểm lớn đới với
CodeIgniter vì hiện nay chỉ có một số framework hổ trợ Event-Driven Programming
như: Prado, Yii…
2.1.2.4 Chưa hổ trợ một số module thông dụng:
Tuy CodeIgniter là framework miễn phí, mã nguồn mở, dễ sử dụng nhưng
vẫn còn thiếu một số module thông dụng thường gặp trong quá trình xây dựng ứng
dụng web như: Trình phân tích RSS, Trình xử lý PDF…
2.1.3 Cấu trúc thư mục của CodeIgniter

Hình 2-1 Cấu trúc của CodeIgniter
Đồ án tốt nghiệp kỹ sư Trang 20 Ngành công nghệ thông tin
 Tập tin index.php (hàng thứ 2 từ dưới lên của hình 2) được xem là controller
đầu vào tiếp nhận các yêu từ từ phía người dùng và gửi về hệ thống xử lý dữ liệu.
 Thư mục user_guide: chứa các tập tin web hướng dẫn các sử dụng
CodeIgniter. Bao gồm các hướng dẫn cài đặt,cấu hình,cập nhật phiên bản mới, sử
dụng các thư viện… Đối với một lập trình viên mới bắt đầu thì đây là cuốn sách
thích hợp nhất.
 Thư mục system: là thành phần cốt lõi của hệ thống, chứa các thư viện, tập
tin ngôn ngữ, helpers, font…đã được dựng sẵn của CodeIgniter. Lập trình viên chỉ
cần gọi thư viện hay helper cần thiết ra sử dụng mà không cần phải định nghĩa lại.
 Thư mục application: là nơi chứa các tập tin được lập trình cho ứng dụng bởi
lập trình viên. Trong đó có một số thư mục, tập tin quan trọng như:
 Thư mục cache: là bộ đệm của hệ thống,chứa các trang đã được xử lý trước
đó từ yêu cầu của người dùng nhằm giảm lượt truy cập đến cơ sở dữ liệu và tăng tốc
độ xử lý của ứng dụng.
 Thư mục config: chứa các tập tin cấu hình hệ thống như: autoload.php,
config.php, database.php, routes.php…

 Thư mục errors: chứa các tập tin lỗi, các tập tin này sẽ được gọi khi ứng
dụng xảy ra lỗi, như lỗi không tìm thấy là tập tin error_404.php…
 Thư mục helpers: chứa các tập tin do lập trình viên tự định nghĩa, trong các
tập tin này chứa các hàm hỗ trợ khi viết ứng dụng.
 Thư mục libraries: chứa các tập tin tự định nghĩa giống helper, nhưng thư
mục này chứa các tập tin thư viện.
 Thư mục controllers: chứa các lớp controller để nhận các yêu cầu từ người
dùng và truyền đến model.
 Thư mục models: chứa các lớp model để tương tác với cơ sở dữ liệu.
 Thư mục views: chứa các lớp view để hiển thị giao diện cho người sử dụng
tương tác với ứng dụng.
 Để tăng khả năng bảo mật cho ứng dụng lập trình viên có thể đưa thư mục
application vào trong system mà không cần cấu hình lại. Và thay đổi tên của thư
mục application thành tên tùy ý. Sau khi đổi tên,cần thiết lập lại tên mới cho biến
$application_folder trong tập tin index.php. Thư mục system cũng có thể đổi tên tuy
Đồ án tốt nghiệp kỹ sư Trang 21 Ngành công nghệ thông tin
ý và cũng phải thiết lập lại tên mới cho biến $system_path trong tập tin index.php.
Ngoài ra lập trình viên còn có thể tạo nhiều ứng dụng trong cùng một bộ cài đặt
CodeIgniter bằng cách tạo ra các thư mục con bên trong thư mục application. Các
thư mục này phải có cấu trúc giống như thư mục application gốc.
Ví dụ ta có hai ứng dụng web example1 và example2. Khi đó cấu trúc thư
mục sẽ là:
application/example1/
application/example1/config/
application/example1/controllers/
application/example1/errors/
application/example1/libraries/
application/example1/models/
application/example1/views/
application/example2/

application/example2/config/
application/example2/controllers/
application/example2/errors/
application/example2/libraries/
application/example2/models/
application/example2/views/
Để chạy được ứng dụng example1 hay example2, ta cần thiết lập lại giá trị
của biến:
$application_folder=“application/example1”;
Hay
$application_folder=“application/example2”;
Đồ án tốt nghiệp kỹ sư Trang 22 Ngành công nghệ thông tin
2.1.4 Hoạt động của CodeIgniter

Hình 2-2 Dòng chảy dữ liệu trong CodeIgniter
 Tập tin index.php được xem là controller đầu vào, thiết lập các tài nguyên
cần thiết để chạy ứng dụng CodeIgniter.
 Routing: Routing có nhiệm vụ xem xét các yêu cầu HTTP và xác định hướng
xử lý với yêu cầu đó.
 Caching: Nếu dữ liệu mà người dùng yêu cầu đã có lưu trong bộ đệm
Caching thì CodeIgniter sẽ lấy dữ liệu này trả về cho người dùng mà không cần gửi
yêu cầu nền về hệ thống và quá trình xử lý kết thúc.
 Security: Nếu trong Caching không lưu dữ liệu mà người dùng yêu cầu thì
dòng chảy sẽ chuyển đến Security. Tại đây CodeIgniter sẽ lọc dữ liệu để phòng
chống XXS hoặc SQL Injection. Sau khi lọc, dữ liệu sẽ được chuyển đến
Application Controller.
 Application Controller: Tại đây Controller sẽ gọi các Models, Libraries,
Helpers, Plugins, Scripts… có liên quan để xử lý dữ liệu đã nhận được.
 View: Dữ liệu sau khi được xử lý sẽ được trả về View dưới dạng html để
hiển thị cho người dùng. Nếu chức năng Caching được bật lên thì dữ liệu này sẽ

được lưu vào cache và sử dụng cho những yêu cầu tiếp theo.
2.1.5 CodeIgniter URLs
Theo mặc định, URL trong CodeIgniter được thiết kế một cách tối ưu, dễ
nhớ và thân thiện với người dùng. Thay vì sử dụng các chuỗi truy vấn tiêu chuẩn
truyền thống tiếp cận đến các URL thì CodeIgniter sử dụng một cách tiếp cận dựa
vào các phân khúc (segment).
URI Segments: Các segment trong URL tiếp cận mô hình Model – View –
Controller có dạng như sau:
Đồ án tốt nghiệp kỹ sư Trang 23 Ngành công nghệ thông tin
example.com/news/article/345
Các segment đầu tiên đại diện cho lớp controller cần gọi đến.
Segment thứ hai là lớp hàm hay phương thức nằm trong lớp controller
(segment 1) cần gọi.
Segment thứ ba và các segment bổ sung phía sau đại diện cho các ID hoặc
bất kỳ biến nào sử dụng cho hàm hay phương thức đó.
Như vậy nếu URI example.com/news/article/345 sẽ có ý nghĩa: Gọi phương
thức (hàm) article() thuộc lớp news và đối số truyền vào là 345.
Loại bỏ chuỗi index.php trong URL: Theo mặc định chuỗi index.php sẽ được
thêm vào URL. Để loại bỏ chuỗi này ta có thể sử dụng tập tin .htaccess có nội dung
như sau:
Options +FollowSymLinks All -Indexes
RewriteEngine On
RewriteCond $1 !^(index\.php|images|css|js|resource|publics|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Lưu ý: Để ứng dụng có thể chạy được trên server ảo khi có file .htaccess lập
trình viên cần cấu hình lại server ảo như sau:
Mở tập tin httpd.conf và tìm và thay thế dòng
#LoadModule rewrite_module modules/mod_rewrite.so

Thành
LoadModule rewrite_module modules/mod_rewrite.so
Thêm phần mở rộng vào URL: Lập trình viên có thể thêm HTML hay bất kỳ
hậu tố nào mà bạn thích vào cuối URL. Thông thường các bộ máy tìm kiếm xó xu
hướng thân thiện với các tập tin HTML. Để có thể làm được điều này ta cần thay
đổi giá trị cùa biến $config[„url_suffix‟] trong tập tin application/config/config.php.
Ví dụ với $config[„url_suffix‟]=„.html‟; URL của ta sẽ có dạng như sau:
example.com/news/article/345.html
Lưu ý: Nếu lập trình viên muốn sử dụng truy vấn dạng chuỗi thì có thể vào
kích hoạt tùy chỉnh như mô tả dưới đây .
Đồ án tốt nghiệp kỹ sư Trang 24 Ngành công nghệ thông tin
Cho phép truy vấn dạng chuỗi: Trong một số trường hợp,bạn có thể sử dụng
chuỗi truy vấn URL có dạng như sau:
example.com/index.php?c=news&m=article&id=345
CodeIgniter hỗ trợ tùy chỉnh tính năng này,có thể được kích hoạt trong tập
tin application/config/config.php Thay:
$config[„enable_query_strings‟] =FALSE;
Thành:
$config[„enable_query_strings‟] =TRUE;
Nếu bạn đang sử dụng truy vấn dạng chuỗi, bạn cần phải xây dựng URL
riêng cho bạn hơn là sử dụng các URL helpers vì URL helpers là những thiết kế để
làm việc cho các segment dựa trên URL.
2.1.6 Định tuyến URI (URI Routing)
Thông thường giữa một chuỗi URL và lớp controller/method có mối quan hệ
một – một. Các segment trong một URI có dạng:
example.com/class/function/id/
Tuy nhiên trong một số trường hợp bạn có thể remap để quyết định cụ thể
những phương thức nào sẽ được gọi tương ứng với từng segment.
Ví dụ bạn muốn URL của bạn có dạng:
example.com/product/1/

example.com/product/2/
example.com/product/3/
example.com/product/4/
Thông thường segment thứ hai của URL được dành riêng cho tên hàm
(phương thức), nhưng trong ví dụ trên segment thứ hai là một ID sản phẩm. Để
khắc phục vấn đề này, CodeIgniter cho phép bạn sử dụng hàm remap để xử lý URI.
Thiết lập quy tắc định tuyến URL: CodeIgniter cho phép lập trình viên có thể
thay đổi cơ chế xử lý URL mặc định thông qua chức năng định tuyến URI bằng
cách thiết lập các quy luật trong tập tin application/config/routes.php. Tập tin này
chứa mảng $route , với khóa là URI do lập trình viên tự định nghĩa, giá trị là URI cũ
dẫn đến phương thức trong controller có tồn tại. Các quy luật trong routes.php được
đọc từ trên xuống,quy luật nằm trên có độ ưu tiên cao hơn so với quy luật dưới.
Đồ án tốt nghiệp kỹ sư Trang 25 Ngành công nghệ thông tin
Ngoài ra CodeIgniter cho phép sử dụng các ký tự đại diện để thay thế. CodeIgniter
đã quy định sẵn hai ký tự đại diện:
 (:num) tương ứng với các giá trị số.
 :any tương ứng với bất kỳ giá trị nào.
Ví dụ:
$route[„view_product/(:num)‟]=„product/view/$1‟;
Ý nghĩa: view_product/(:num) là do lập trình viên định nghĩa tùy ý, và
truyền ID là một số. Và khi gọi URL này CodeIgniter sẽ tự động gọi phương thức
view của lớp product và với đối dố truyền vào là ID.
$route[„product/(:any)‟] = “catalog/product_lookup”;
Ý nghĩa: tất cả các yêu cầu bắt đầu bằng product sẽ gọi đến phương thức
product_lookup của lớp calalog.
Ta cũng có thể sử dụng biểu thức chính quy để thiết lập các quy luật, ví dụ
như:
$route[„products/([a-z]+)/(\d+)‟] = “$1/id_$2”;

Routes dành riêng:Có hai routes dành riêng và mặc định của CodeIgniter:

$route[„default_controller‟] = „welcome‟;
Đây là URI mặc định và sẽ tự động khi trang web được nạp, URI sẽ gọi đến
lớp welcome, đây là lớp điều khiển chạy đến trang chủ của website.
$route[„404_override‟] = „‟;
Route này sẽ được tự động gọi nếu URI không chứ dữ liệu. CodeIgniter
khuyến khích lập trình viên để route này, nếu một URI không tồn tại thì mặc định sẽ
xuất hiện trang 404.
Chú ý: Những route dành riêng của CodeIgniter phải để trên cùng so với các
route do lập trình viên định nghĩa.
2.1.7 Model
Model là những lớp php được thiết kế để thực hiện các thao tác trao đổi
thông tin với cơ sở dữ liệu của hệ thống.Một lớp Model có thể chứa các chức năng
thêm, xóa, cập nhật, truy vấn…Trong CodeIgniter việc khi báo các lớp model cho
một đối tượng thực thể nào đó là không cần thiết, vì trong controller ta có thể gọi

×