Ch ưa hỗ trợ một số module thông dụng: So sánh với framework khác, CodeIgniter không có các module thực thi một số tác vụ thường gặp trong quá trình xây dựng ứng dụng web như Chứng th
Trang 1 LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành và sâu sắc nhất đến thầy Trần Mạnh Tuấn, người đã tận tình chỉ bảo và hướng dẫn em trong suốt quá trình học tập và thực hiện đồ án tốt nghiệp Thầy đã giúp đỡ, dạy bảo em không chỉ về mặt kiến thức, mà còn là những kỹ năng để học tập và làm việc Đó là những bài học kinh nghiệm quý báu sẽ đồng hành cùng em trên suốt chặng đường học tập, nghiên cứu và làm việc sau này
Em xin được gửi lời cảm ơn đến các thầy cô giáo của trường Đại học Công nghệ Thông tin và Truyền thông Thái nguyên đã giảng dạy, truyền đạt cho em những kiến thức tốt nhất, những kỹ năng sống Đó là nền tảng
để em vững bước trên chặng đường sau này của mình
Thực hiện tốt đồ án lần này còn có sự trợ giúp của các anh chị trong công ty TNHH Phần mềm 2NF (2NF Software Co., LTD) Đặc biệt được sự chỉ dẫn của anh Nguyễn Bảo Ngọc trong quá trình làm thực tập tốt nghiệp Nó đã tạo tiền đề cho lần thực hiện đề tài đồ án lần này
Cuối cùng em xin gửi lời cảm ơn tới bố mẹ, gia đình, bạn bè, những người đã luôn bên cạnh em trong mọi hoàn cảnh, tạo cho em những điều kiện tốt nhất để em có thể phát huy, tìm hiểu những đam mê, sở thích của mình trong các lĩnh vực
Thái Nguyên, tháng 6 năm 2016 Người thực hiện
Lê Văn Diện
Trang 2 LỜI CAM ĐOAN
Trong báo cáo này sử dụng những kết quả nghiên cứu lý thuyết, khảo sát thực tế và phân tích thiết kế hệ thống do em tham khảo tài liệu và trực tiếp thực hiện dưới sự hướng dẫn của thầy Trần Mạnh Tuấn Những kết quả thu được là của riêng em và không sao chép trái phép
Em cam đoan những kết luận trên là đúng sự thật, nếu sai lệch em xin chịu hoàn toàn trách nhiệm
Thái Nguyên, tháng 6 năm 2016 Người thực hiện
Lê Văn Diện
Trang 3CHƯƠNG 2 : PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ERP – MODULE QUẢN
LÝ SƠ YẾU LÝ LỊCH ỨNG VIÊN VÀ QUY TRÌNH TUYỂN DỤNG 342.1 Xác định yêu cầu của website 34
2.2 Các phương pháp phân tích hệ thống và sơ đồ chức năng của website 37
2.2.1 Các phương pháp phân tích hệ thống 37
2.2.2 Sơ đồ phân cấp chức năng của webssite 39
2.3 Xác định flow 40
Trang 42.4 Xác định mô hình TCMR Database ER Diagram 42
3.2.4 Loại bỏ chuỗi index.php trong URL 50
3.3 Cài đặt Bootstrap và tạo mockup cho webssite 51
3.3.1 Cài đặt Bootstrap 51
3.3.2.Tạo mockup cho website 52
CHƯƠNG 4 : GIỚI THIỆU WEBSITE QUẢN LÝ QUY TRÌNH TUYỂN DỤNG CHO CÔNG TY TNHH 2NF 53
4.1 Giao diện chính của website: 53
4.2 Giao diện một số chức năng của webssite: 57
KẾT LUẬN 63
TÀI LIỆU THAM KHẢO 64
Trang 5 DANH MỤC HÌNH ẢNH
Hình 1.1: Mô hình Model-View-Controller 11
Hình 1.2: Dòng chảy dữ liệu trong CodeIgniter 17
Hình 2.1: Sơ đồ phân cấp chức năng của website 39Hình 2.2: Flow dữ liệu chính 41
Hình 2.3: Mô hình TCMR Database ER Diagram 42Hình 3.1: Tiến hành cài đặt xampp 45
Hình 3.2:Ấn next để tiếp tục 45
Hình 3.3: Tiến trình cài đặt đang chạy 46
Hình 3.4: Cài đặt thành công 46
Hình 3.5: Mở trang điều khiển chính 47
Hình 3.6: Cấu trúc của codeigniter48
Hình 4.1: Giao diện trang chính 53
Hình 4.2: Giao diện trang Lists Skills 54
Hình 4.3: Giao diện trang Lists Entry Test 55
Hình 4.4: Giao diện trang Listing Account 56
Hình 4.5: Giao diện đăng nhập 57
Hình 4.6: Giao diện thêm thông tin User 57
Hình 4.7: Giao diện show thông tin ứng viên 58
Hình 4.10: Giao diện sửa thông tin ứng viên 59
Trang 6Hình 4.11: Giao diện thêm mới ,sửa thông tin skill 60
Hình 4.12: Giao diện tìm kiếm skill 60
Hình 4.13: Giao diện thêm mới,sửa thông tin entry test 61
Hình 4.14: Giao diện tìm kiếm bài kiểm tra 61
Hình 4.15: Giao diện sửa thông tin user 62
Hình 4.15: Giao diện thay đổi mật khẩu user 62
LỜI MỞ ĐẦU
Công nghệ thông tin đã có những bước phát triển mạnh mẽ Máy tính điện tử không còn là phương tiện quý hiếm mà đang ngày một gần gũi với con người
Đứng trước sự bùng nổ thông tin, các tổ chức và các doanh nghiệp đều tìm mọi biện pháp để xây dựng hoàn thiện hệ thống thông tin của mình nhằm tin học hóa các hoạt động tác nghiệp của đơn vị mình
Nhu cầu thực tế của xã hội đòi hỏi con người phải luôn năng động vàsáng tạo để tạo ra ngày càng nhiều sản phẩm cho xã hội Các công ty luôn luôn phát triển, các hồ sơ tuyển vào sẽ nhiều lên vì vậy đòi hỏi phải cần rất nhiều những kho chứa hồ sơ để lưu trữ hồ sơ của nhân viên khi vào công
ty Để giảm đi những bất cập trong công tác quản lý nhân sự và lương trong công ty, giải pháp hiệu quả nhất hiện nay là đầu tư công nghệ và thiết bị hiện đại, ứng dụng công nghệ thông tin, tự động hoá trong điều hành và quản lý nhân sự để nâng cao chất lượng phục vụ, đổi mới phương thức quản lý, tăng năng suất hiệu quả
Lưu trữ hồ sơ của ứng viên tìm việc là việc cất giữ lại hồ sơ của các ứng viên để tra cứu khi cần thiết Hồ sơ của ứng viên tìm việc được xem là những thông tin liên quan đến một cá nhân Thông tin của từng ứng viên có
Trang 7những nét đặc trưng riêng cho nên không thể nhầm lẫn thông tin với bất kỳ một cá nhân nào khác.
Tuyển dụng là một công tác quan trọng và thường xuyên của các doanh nghiệp Việc tuyển dụng đã khó nhưng để chọn một nhân viên có tài thực sựthì càng khó gấp bội phần Để tuyển dụng được đúng người thì một trong những nghiệp vụ quan trọng đó là nhà tuyển dụng phải thực hiện tốt quy trình tuyển dụng, trong đó không thể bỏ qua khâu sàng lọc và phân loại hồ
sơ Chính vì vậy, việc sắp xếp, lưu trữ hồ sơ của các ứng viên một cách khoa học thực sự rất cần thiết Đây là một tiền đề quan trọng cho việc tuyển chọn được những nhân viên xuất sắc cho doanh nghiệp
Khi doanh nghiệp đăng tin tuyển dụng, các ứng viên quan tâm sẽ gửi
hồ sơ về doanh nghiệp Lúc này doanh nghiệp phải tổ chức việc lưu trữ hồ
sơ của ứng viên để phục vụ cho công tác tuyển dụng của mình.Việc lưu trữ
hồ sơ ứng viên một cách khoa học giúp cho doanh nghiệp dễ sàng lọc, phân loại ứng viên theo những tiêu chí lựa chọn mà doanh nghiệp đã đề ra, giúp doanh nghiệp loại bớt những ứng viên không đáp ứng được yêu cầu Đây là công việc hết sức quan trọng và cần thiết vì nó giúp cho doanh nghiệp tiết kiệm rất nhiều thời gian, công sức và chi phí Ngoài ra, lưu trữ hồ sơ ứng viên cũng giúp cho doanh nghiệp làm công tác dự phòng với những ứng viên chưa được tuyển dụng Đây thực sự là một nguồn cung cấp ứng viên
“miễn phí” cho doanh nghiệp khi cần thiết
Hôm nay em chọn đề tài đồ án tốt nghiệp “Xây dựng hệ thống ERP
cho doanh nghiệp - Module Quản lý sơ yếu lý lịch ứng viên và quy trình tuyển dụng cho Công ty TNHH Phần mềm 2NF” Website của em
có thể chưa hoàn chỉnh và còn nhiều thiếu sót nhưng đó là sự cố gắng của
em trong bước đầu hòa nhập vào môi trường làm việc bên ngoài Em mong
Trang 8quý thầy cô trong khoa có thể tạo điều kiện giúp đỡ em hoàn thành đồ án tốt hơn.
Website quản lý quy trình tuyển dụng cho công ty TNHH 2NF của em được lập trình bằng ngôn ngữ lập trình PHP sử dụng công nghệ Framework Code Igniter và kết nối bằng cơ sở SQL, website giúp công ty quản lý hồ sơ ứng viên, giúp giảm tải bớt việc tìm kiếm mất thời gian mà hiệu quả và tính chính xác vẫn cao
Nhằm giới hạn phạm vi nghiên cứu theo như mục đích đã đề ra, đềtài tập trung xem xét, phân tích đánh giá các vấn đề nằm trong phạm vi sau:
Trang Web quản lý hồ sơ ứng viên cho công ty doanh nghiệp
Trang 9lập trình kịch bản hay một loạimã lệnh chủ yếu được dùng để phát triển cácứng dụng viết cho máy chủ,mã nguồn mở, dùng cho mục đích tổng quát Nó rất thích hợp vớiwebvà có thể dễ dàng nhúng vào trang HTML
Do được tối ưu hóa cho cácứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giốngC và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới
Lịch sử phát triển của PHP
PHP/FI
PHP được phát triển từ một sản phẩm có tên là PHP/FI PHP/FI do Rasmus Lerdorf tạo ra năm 1994, ban đầu được xem như là một tập con đơn giản của các mã kịch bản Perl để theo dõi tình hình truy cập đến bản
sơ yếu lý lịch của ông trên mạng Ông đã đặt tên cho bộ mã kịch bản này là 'Personal Home Page Tools' Khi cần đến các chức năng rộng hơn, Rasmus đã viết ra một bộ thực thi bằng C lớn hơn để có thể truy vấn tới các
cơ sở dữ liệu và giúp cho người sử dụng phát triển các ứng dụng web đơn giản PHP/FI, viết tắt từ "Personal Home Page/Forms Interpreter", bao gồm một số các chức năng cơ bản cho PHP như ta đã biết đến chúng ngày nayVào năm 1997, PHP/FI 2.0, lần viết lại thứ hai của phiên bản C, đã thu hút được hàng ngàn người sử dụng trên toàn thế giới với xấp xỉ 50.000 tên miền
đã được ghi nhận là có cài đặt nó, chiếm khoảng 1% số tên miền có trên mạng Internet Tuy đã có tới hàng nghìn người tham gia đóng góp vào việc
tu chỉnh mã nguồn của dự án này thì vào thời đó nó vẫn chủ yếu chỉ là dự
án của một người
PHP/FI 2.0 được chính thức công bố vào tháng 11 năm 1997, sau một thời gian khá dài chỉ được công bố dưới dạng các bản beta Nhưng không
Trang 10lâu sau đó, nó đã được thay thế bởi các bản alpha đầu tiên của PHP 3.0.
PHP 3
PHP 3.0 là phiên bản đầu tiên cho chúng ta thấy một hình ảnh gần gũi với các phiên bản PHP mà chúng ta được biết ngày nay Nó đã được Andi Gutmans và Zeev Suraski tạo ra năm 1997 sau khi viết lại hoàn toàn bộ mã nguồn trước đó Các tính năng khác được giới thiệu trong PHP 3.0 gồm có
hỗ trợ cú pháp hướng đối tượng và nhiều cú pháp ngôn ngữ nhất quán khác.Ngôn ngữ hoàn toàn mới đã được công bố dưới một cái tên mới, xóa
bỏ mối liên hệ với việc sử dụng vào mục đích cá nhân hạn hẹp mà cái tên PHP/FI 2.0 gợi nhắc Nó đã được đặt tên ngắn gọn là 'PHP', một kiểu viết tắt hồi quy của "PHP: Hypertext Preprocessor"
PHP 3.0 đã chính thức được công bố vào tháng 6 năm 1998, sau thời gian 9 tháng được cộng đồng kiểm nghiệm
PHP 4
Vào mùa đông năm 1998, ngay sau khi PHP 3.0 chính thức được công
bố, Andi Gutmans và Zeev Suraski đã bắt đầu bắt tay vào việc viết lại phần lõi của PHP Mục đích thiết kế là nhằm cải tiến tốc độ xử lý các ứng dụng phức tạp, và cải tiến tính mô đun của cơ sở mã PHP Một động cơ mới, cótên 'Zend Engine' (ghép từ các chữ đầu trong tên của Zeev và Andi), đã đáp ứng được các nhu cầu thiết kế này một cách thành công, và lần đầu tiên được giới thiệu vào giữa năm 1999 PHP 4.0, dựa trên động cơ này, và
đi kèm với hàng loạt các tính năng mới bổ sung, đã chính thức được công
bố vào tháng 5 năm 2000, gần 2 năm sau khi bản PHP 3.0 ra đời Ngoài tốc
Trang 11độ xử lý được cải thiện rất nhiều, PHP 4.0 đem đến các tính năng chủ yếu khác gồm có sự hỗ trợ nhiều máy chủ Web hơn, hỗ trợ phiên làm việc HTTP, tạo bộ đệm thông tin đầu ra, nhiều cách xử lý thông tin người sửdụng nhập vào bảo mật hơn và cung cấp một vài các cấu trúc ngôn ngữ mới.
Với PHP 4, số nhà phát triển dùng PHP đã lên đến hàng trăm nghìn và hàng triệu site đã công bố cài đặt PHP, chiếm khoảng 20% số tên miền trên mạng Internet
PHP 5
Sự thành công hết sức to lớn của PHP 4.0 đã không làm cho nhóm phát triển PHP tự mãn Cộng đồng PHP đã nhanh chóng giúp họ nhận ra những yếu kém của PHP 4 đặc biệt với khả năng hỗ trợ lập trình hướng đối tượng (OOP), xử lý XML, không hỗ trợ giao thức máy khách mới của MySQL 4.1 và 5.0, hỗ trợ dịch vụ web yếu Những điểm này chính là mục đích để Zeev và Andi viết Zend Engine 2.0, lõi của PHP 5.0 Ngày 14 tháng
7 năm 2005, PHP 5.1 Beta 3 được PHP Team công bố đánh dấu sự chín muồi mới của PHP với sự có mặt của PDO, một nỗ lực trong việc tạo ra một
hệ thống API nhất quán trong việc truy cập cơ sở dữ liệu và thực hiện các câu truy vấn Ngoài ra, trong PHP 5.1, các nhà phát triển PHP tiếp tục có những cải tiến trong nhân Zend Engine 2, nâng cấp mô đun PCRE lên bản PCRE 5.0 cùng những tính năng và cải tiến mới trong SOAP, streams và SPL
PHP 6
Hiện nay phiên bản tiếp theo của PHP đang được phát triển, PHP 6 bản
sử dụng thử đã có thể được download tại địa chỉ http://snaps.php.net Phiên bản PHP 6 được kỳ vọng sẽ lấp đầy những khiếm khuyết của PHP ởphiên bản hiện tại, ví dụ: hỗ trợ namespace (hiện tại các nhà phát triển vẫn
Trang 12chưa công bố rõ ràng về vấn đề này); hỗ trợ Unicode; sử dụng PDO làm API chuẩn cho việc truy cập cơ sở dữ liệu, các API cũ sẽ bị đưa ra thành thư viện PECL
Cú pháp
PHP chỉ phân tích các đoạn mã nằm trong những dấu giới hạn của
nó Bất cứ mã nào nằm ngoài những dấu giới hạn đều được xuất ra trực tiếp không thông qua xử lý bởi PHP Các dấu giới hạn thường dùng nhất
là <?php và ?>, tương ứng với dấu giới hạn mở và đóng Các dấu giới
hạn <script language="php"> và </script> cũng đôi khi được sử dụng Cách viết dấu giới hạn dạng thẻ ngắn cũng có thể được dùng để thông báo bắt đầu đoạn mã PHP, là <? hay <?= (dấu này được sử dụng để in
ra (echo) các xâu ký tự hay biến) với thẻ thông báo kết thúc đoạn mã
PHP là ?> Những thẻ này thường xuyên được sử dụng, tuy nhiên giống
với những thẻ kiểu ASP (<% hay <%= và %>), chúng không có tính di động cao bởi có thể bị vô hiệu khi cấu hình PHP Bởi vậy, việc dùng các thẻ dạng ngăn hay các thẻ kiểu ASP không được khuyến khích Mục đích của những dấu giới hạn này là ngăn cách mã PHP với những đoạn mã thuộc ngôn ngữ khác, gồm cả HTML Mọi đoạn mã bên ngoài các dấu này đều bị hệ thống phân tích bỏ qua và được xuất ra một cách trực tiếp
Các biến được xác định bằng cách thêm vào trước một dấu đô la ($)
và không cần xác định trước kiểu dữ liệu Không giống với tên hàm và lớp, tên biến là trường hợp nhạy cảm Cả dấu ngoặc kép ("") và ký hiệu đánh dấu văn bản (<<<EOF EOF;) đều có thể dùng để truyền xâu và giá trị biến PHP coi xuống dòng như một khoảng trắng theo kiểu như một ngôn ngữdạng tự do (free-form language) (trừ khi nó nằm trong trích dẫn xâu), và các phát biểu được kết thúc bởi một dấu chấm phẩy PHP có ba kiểu cú pháp
Trang 13chú thích: /* */ cho phép một đoạn chú thích tùy ý, trong khi đó // và # cho phép chú thích trong phạm vi một dòng Phát biểu echo là một trong những lệnh của PHP cho phép xuất văn bản (vd ra một trình duyệt web).
Về cú pháp các từ khóa và ngôn ngữ, PHP tương tự hầu hết các ngôn ngữ lập trình bậc cao có cú pháp kiểu C Các phát biểu điều kiện
If (Nếu), vòng lặp for và while, các hàm trả về đều tương tự cú pháp của các ngôn ngữ như C, C++, Java và Perl
Biến trong PHP
Trong PHP biến được ký hiệu bởi dấu " $ " đi sau là các ký tự bao gồm các chữ cái thường (a - z) in hoa (A - Z) và các chữ số (0 - 9) và dấu " gạch dưới " ( _ )
- Biến bắt đầu bằng dấu " $ " sau đó là các ký tự chữ cái hoặc dấu gạch dưới
- Biến không được viết cách
- Biến không được bắt đầu bằng chữ số:
Ví dụ:
Hằng trong PHP
Trong PHP có hai loại hằng, hằng có sẵn trong PHP và hằng do chúng ta tự định nghĩa
Trang 14- Hằng có sẵn trong PHP, ví dụ như:
Và rất nhiều các hằng khác như E_ERROR, E_WARNING
- Hằng do chúng ta định nghĩa, để định nghĩa hằng chúng ta dùng cấu trúc sau :
Trang 16 Toán tử so sánh : các phép toán logic như so sánh bằng, lớn hơn hoặc nhỏ hơn
Trang 17Phép và && hoặc and Cả 2 vế phải
thoả mãn điều kiện
$a > $b && $a
> $c
Phép hoặc || hoặc or Một trong 2
thoả mãn điều kiện là được
1.2 Framework Code Igniter
Tại sao lại dùng Framework ?
Framework cho phép cấu trúc trong việc phát triển các ứng dụng bằng cách cung cấp các class và functions có thể tái sử dụng và có thể làm giảm thời gian phát triển đáng kể Một số nhược điểm để Framework được cho rằng họ cung cấp các class không thích hợp cho các ứng dụng khác nhau làm cho các ứng dụng khó khăn hơn để điều hướng
Định nghĩa
CodeIgniter là một nền tảng ứng dụng web 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
Trang 18được phát hành ngày 28.02.2006, phiên bản hiện tại: 1.7.2 (phát hành ngày 11.09.2009) Ý tưởng xây dựng CodeIgniter được dựa trên Ruby on Rails, một nền tảng ứng dụng web được viết bằng ngôn ngữ Ruby Hiện tại, CodeIgniter đang được phát triển bởi ExpressionEngine Development Team thuộc EllisLab, Inc.
Ưu điểm
Được thiết kế theo mô hình Model-View-Controller: Mô hình MVC
giúp tách thành phần hiển thị giao diện (presentation) và xử lý (business logic) của một phần mềm thành những thành phần độc lập, từ đó giúp cho việc thiết kế, xử lý và bảo trì mã nguồn dễ dàng, đồng thời tăng khả năng
mở rộng của phần mềm CodeIgniter vận dụng mô hình này trong thiết kế, giúp tách biệt các tập tin giao diện với các tập tin xử lý dữ liệu, nâng cao khả năng quản lý và dễ bảo trì
Nhỏ gọn: Gói cài đặt chỉ 404KB (không bao gồm phần User Guide)
So với các PHP framework khác như CakePHP (1.3MB), Symfony (5.08MB) hay Zend Framework (5.66MB)…kích thước của CodeIgniter giúp giảm thiểu đáng kể không gian lưu trữ
Tốc độ nhanh: CodeIgniter được đánh giá là PHP framework có tốc
độ nhanh nhất hiện nay Bằng cơ chế lưu nội dung vào bộ đệm (cache), kiểm tra bộ đệm trước khi tiến hành thực hiện yêu cầu, CodeIgniter giảm số lần truy cập và xử lý dữ liệu, từ đó tối ưu hóa tốc độ tải trang
Miễn phí: CodeIgniter được phát hành dưới giấy phép Apache/BSD
mở rộng, cho phép người dùng tự do thay đổi, phát triển và phân phối mã
Trang 19 Hỗ trợ Search Engine Optimization: Cấu trúc URL của
CodeIgniter rất thân thiện với các robot tìm kiếm
Hệ thống th ư viện phong phú: CodeIgniter cung cấp các thư viện
phục vụ cho những tác vụ thường gặp nhất trong lập trình web, chẳng hạn như truy cập cơ sở dữ liệu, gửi email, kiểm tra dữ liệu, quản lý session, xử lý ảnh…đến những chức năng nâng cao như XML-RPC, mã hóa, bảo mật…
Bảo mật hệ thống: Cơ chế kiểm tra dữ liệu chặt chẽ, ngăn ngừa
XSS và SQL Injection của CodeIgniter giúp giảm thiểu các nguy cơ bảo mật cho hệ thống
Hỗ trợ ORM (Object-Relational Mapping): Object Relational
Mapping (ORM) là một kỹ thuật lập trình, trong đó các bảng của cơ sở dữliệu được ánh xạ thành các đối tượng trong chương trình Kỹ thuật này giúp cho việc thực hiện các thao tác trong cơ sở dữ liệu (Create Read Update Delete – CRUD) dễ dàng, mã nguồn ngắn gọn hơn
Hỗ trợ AJAX: AJAX (Asynchronous JavaScript and XML) đã trở thành một phần không thể thiếu trong bất kỳ ứng dụng Web 2.0 nào AJAX giúp nâng cao tính tương tác giữa người dùng và hệ thống, giúp cho người dùng có cảm giác như đang sử dụng ứng dụng desktop vì các thao tác đều diễn ra “tức thời” Hiện tại, CodeIgniter vẫn chưa có thư viện dựng sẵn nào
để hỗ trợ xây dựng ứng dụng AJAX Lập trình viên phải sử dụng các thưviện bên ngoài, như jQuery, Script.aculo.us, Prototype hay Mootools…
Nh ược điểm
Trang 20 Ch ưa hỗ trợ một số module thông dụng: So sánh với framework
khác, CodeIgniter không có các module thực thi một số tác vụ thường gặp trong quá trình xây dựng ứng dụng web như Chứng thực người dùng (User Authorization), Trình phân tích RSS (RSS Parser) hay Trình xử lý PDF…
Ch ưa hỗ trợ Event-Driven Programming: Event-Driven Programming (EDP) là một nguyên lý lập trình, trong đó các luồng xử lý của
hệ thống sẽ dựa vào các sự kiện, chẳng hạn như click chuột, gõ bàn phím…Đây không phải là một khuyết điểm to lớn của CodeIgniter vì hiện tại, chỉ có một số ít framework hỗ trợ EDP, bao gồm Prado, QPHP và Yii
Ch ưa hỗ trợ Object-Relational Mapping (ORM) : ORM là một kỹ
thuật lập trình, trong đó các bảng của cơ sở dữ liệu được ánh xạ thành các đối tượng trong lập trình Kỹ thuật này giúp cho việc thực hiện các thao tác trong cơ sở dữ liệu (Create Read UpdateDelete – CRUD) dễ dàng, mã nguồn ngắn gọn hơn
Mô hình Model-View-Controller
Model-View-Control (MVC) là một kiến trúc phần mềm, hiện đang được xem là một mẫu thiết kế trong công nghệ phần mềm Mô hình MVC tách biệt phần xử lý dữ liệu ra khỏi phần giao diện, cho phép phát triển, kiểm tra
và bảo trì các thành phần một cách độc lập
Trang 21Hình 1.1: Mô hình Model-View-Controller
Theo đó:
Model thể hiện các cấu trúc dữ liệu Các lớp thuộc thành phần Model thường thực hiện các tác vụ như truy vấn, thêm, xóa, cập nhật dữ liệu Khi dữ liệu trong Model thay đổi, thành phần View sẽ được cập nhật lại
View 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 sử dụng Một Model có thể có nhiều View tùy thuộc vào các mục đích khác nhau
Controller đóng vai trò trung gian giữa Model và View Thông tin người dùng từ View được gửi cho Controller xử lý, sau đó Controller tương tác với Model để lấy dữ liệu được yêu cầu, sau cùng Controller trả dữ liệu này về cho View Mô hình MVC thường được sử dụng trong các ứng dụng web,vì thành phần View (mã HTML/XHTML) được sinh ra từ các ngôn ngữ
Trang 22lập trình web Thành phần Controller sẽ nhận các dữ liệu GET/POST, xử
lý những dữ liệu này, sau đó chuyển sang Model xử lý.Model sẽ rả dữ liệu
về phía Controller,sau đó Controller sinh mã HTML/XHTML để thể hiện trên View
Model
Model là những lớp được xây dựng nhằm thực hiện việc trao đổi thông tin với cơ sở dữ liệu Một lớp Model có thể thực hiện các tác vụ truy vấn, thêm, xóa, cập nhật dữ liệu Trong CodeIgniter, việc khai báo các lớp model dành cho một thực thể nào đó là không cần thiết, vì trong controller của thực thể đó, ta có thể gọi đến thư viện database để thực hiện các thao tác với cơ sở dữ liệu Tuy nhiên, để tiện cho việc quản lý, xây dựng lớp model cho một thực thể được khuyến khích Một lớp model chuẩn trong CodeIgniter có cấu trúc như sau:
Khi khai báo một lớp model, ta cần tuân theo một số quy tắc:
Trang 23 Tên lớp được viết hoa chữ đầu tiên, phần còn lại viết thường Ví dụ:
User_model, Blog_model, Article_model…
Tên tập tin được đặt như tên lớp,và được đặt trong thư mục:
application/models/ Các thư mục có thể được lưu lồng với nhau để
thuận tiện cho việc quản lý
Bắt buộc phải kế thừa từ lớp CI_Model Trong hàm tạo của lớp con, phải gọi đến hàm tạo của lớp cha
Để sử dụng model trong controller, ta sử dụng đoạn mã sau :
Trong đó, model_name là tên của lớp model Nếu lớp model được lưu trong một thư mục, ta cần ghi rõ đường dẫn đến thư mục đó Ví dụ lớp
application/models/front_end/blog_model.php Để sử dụng lớp này, ta sử dụng đoạn mã sau:
Sau khi load lớp model, ta có thể sử dụng lớp này trong chương trình bằng cách gọi
Để gán một tên khác cho lớp model khi sử dụng trong chương trình, ta có thể truyền vào tham số thứ hai như sau:
Trang 24Khi đó, để sử dụng các phương thức của lớp model, ta gọi:
View
View là những tập tin HTML được xây dựng nhằm 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 có thể là một trang web hoàn chỉnh, hay chỉ là một phần của trang web (header, footer, sidebar…) Nội dung của tập tin view, ngoài mã HTML còn có thể chứa mã PHP View không bao giờ được gọi trực tiếp mà phải thông qua controller
Để sử dụng view trong controller, ta sử dụng đoạn mã sau:
Trong đó, view_name là tên của view, $data chứa các dữ liệu sẽ được hiển thị trong view Cũng giống như model, ta có thể lưu view trong các thư mục
để tiện cho việc quản lý
Khi sử dụng, chỉ cần khai báo đường dẫn tương đối đến thư mục chứa view Ví dụ tập tin header.tpl.php được lưu trong thư mục application/views/front_end
Để hiển thị view này, ta sử dụng đoạn mã sau:
CodeIgniter cho phép sử dụng nhiều view trong cùng một phương thức của controller Dữ liệu trong các view sẽ được kết hợp lại với nhau Ví dụ:
Trang 25Để hiển thị dữ liệu trong model ra view, ta có thể truyền một mảng hoặc đối tượng làm đối số thứ hai khi load view Ví dụ:
Hoặc
Khi đó, các khóa của mảng hoặc các thuộc tính của đối tượng sẽ được chuyển thành các biến để sử dụng trong tập tin view Dưới đây là nội dung
mẫu của tập tin employee_detail.php:
Ta cũng có thể sử dụng các cấu trúc điều khiển (if, else, switch…case…), lặp (for, while, do…while…) bên trong view để hiển thị dữliệu Ví dụ sau sẽ hiển thị danh sách các nhân viên:
Trang 26CodeIgniter còn cho phép lập trình viên có thể lấy về nội dung của view thay vì xuất trực tiếp trình duyệt, bằng cách truyền true làm đối số thứ ba khi tải view
Controller
Controller là những lớp đóng vai trò trung gian giữa view và model Controller nhận các yêu cầu từ phía người dùng, kiểm tra chúng trước khi chuyển qua cho model Sau khi model xử lý yêu cầu và trả dữ liệu về, controller chuyển sang view để hiển thị dữ liệu cho người dùng Trong CodeIgniter, các lớp controller được gán vào segment thứ nhất trong URI
Một lớp controller chuẩn trong CodeIgniter có mẫu:
Trang 27Khi khai báo một lớp controller, ta cần tuân theo một số quy tắc:
Tên lớp được viết hoa chữ đầu tiên, phần còn lại viết thường Ví dụ: User, Blog, Article…
Tên tập tin được đặt như tên lớp, và được đặt trong thư mục
application/controllers/ Các thư mục có thể được lưu lồng vào nhau
để thuận tiện cho việc quản lý
Bắt buộc phải kế thừa từ lớp Controller Trong hàm tạo của lớp con, phải gọi đến hàm tạo của lớp cha
Segment thứ hai trong URI sẽ gọi đến phương thức tương ứng trong controller Các giá trị của các segment còn lại trong URI chính là các tham
số truyền vào cho phương thứ này CodeIgniter quy định một phương thức đặc biệt, index() Phương thức này có thể xem như đầu vào của controller,
sẽ được tự động gọi trong trường hợp segment thứ hai của URI bị bỏ trống
Ví dụ:
Trang 28Khi truy xuất đến URI domain.com/index.php/blog, phương thức index() được gọi,ta sẽ thấy chuỗi Welcome to my blog Tiếp theo, truy xuất đến
URI: domain.com/index.php/blog/view/1 sẽ hiển thị nội dung của bài viết có
ID bằng 1 Ngoài ra, CodeIgniter cho phép lập trình thay đổi cơ chế gọi phương thức thông qua segment thứ hai bằng hàm _remap() Hàm này sẽ được 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
Lưu ý: các phương thức private trong controller được bắt đầu bằng ký tự
gạch dưới (_), ví dụ: _remap(), _my_private_method()…Các hàm này
Trang 29không thể được gọi bằng segment thứ hai trong URI.
Code Igniter URL
Theo mặc định, cấu trúc URL của CodeIgniter được thiết kế dựa vào các segment thay cho kiểu query truyền thống Cách tiếp cận này giúp URL trở nên ngắn gọn, có ý nghĩa, dễ ghi nhớ và thân thiện với các bộ máy tìm kiếm Một URL trong CodeIgniter có dạng:
Trong đó:
Segment controller là tên của lớp controller được gọi
Segment method là tên của phương thức trong lớp controller ở trên
Segment param là các đối số của phương thức đó.
Như vậy,URI domain.com/index.php/product/list/12 sẽ mang ý nghĩa: Gọi đến phương thức list() thuộc lớp Product với đối số truyền vào bằng 12
Dòng chảy dữ liệu trong CodeIgniter
Trang 30Hình 1.2: Dòng chảy dữ liệu trong CodeIgniter
1 Tập tin index.php đóng vai trò làm controller đầu vào, thiết lập các tài nguyên cần thiết cho hệ thống
2 Routing: Quy trình điều hướng giúp xác định các yêu cầu và hướng xử lý đối với
chúng
3 Caching: Nếu dữ liệu được yêu cầu đã được lưu trong bộ đệm, CodeIgniter sẽ trả dữ liệu trong bộ đệm về phía client Quá trình xử lý kết thúc
4 Security: Dữ liệu trước khi được chuyển đến các Controller sẽ được lọc
Trang 31hiện việc này Để kích hoạt hook, ta cần thay đổi giá trị của biến $config ['enable_hooks'] trong tập tin application/config/config.php:
Các hook được khai báo trong tập tin application/config/hooks.php, có
mẫu sau:
Trong đó:
class: tên lớp sẽ được gọi Nếu chỉ sử dụng một hàm thủ tục, ta có thể bỏ trống giá trị này
function: tên /hàm phương thức sẽ được gọi.
filename: tên tập tin chứa lớp /hàm đó.
filepath:đường dẫn đến tập tin hook Nếu tập tin nằm trong thư mục
application/hooks, ta chỉ cần đặt giá trị này bằng hooks Nếu tập tin
nằm trong thư mục application/hooks/utilities,ta đặt giá trị này bằng
hooks/utilities Lưu ý, không có dấu / ở cuối.
params: các tham số được truyền vào cho hàm.
Trang 32Khóa pre_controller cho biết thời điểm hook này được thực hiện CodeIgniter hỗ trợ các thời điểm sau:
pre_system: được gọi khi hệ thống vừa khởi động Ở giai đoạn này
chỉ có lớp benchmark với hook được kích hoạt Các tiến trình khác vẫn chưa xảy ra
pre_controller: được gọi trước khi các controller hoạt động Các tiến
trình routing và security đã được thực hiện
post_controller_constructor: được gọi ngay sau khi hàm tạo của controller được thi hành Các hàm trong controller vẫn chưa được gọi
post_controller: được gọi ngay sau khi controller thực hiện xử lý
yêu cầu
display_override: thực hiện việc chồng (override) hàm display()
để hoàn tất nội dung trang trước khi gửi đến trình duyệt của người dùng Nội dung trang có thể được lấy bằng cách gọi $this->CI->
output->get_output()
cache_override: thực hiện việc chồng hàm_display_cache() để lấy trang trong bộ đệm
scaffolding_override: không sử dụng từ CodeIgniter 1.6.
post_system: được gọi sau khi hệ thống đã thực hiện xong một yêu
cầu
Trang 33 Các th ư viện
Sức mạng của CodeIgniter nằm ở các thư viện xây dựng sẵn Hiện tại, CodeIgniter hỗ trợ người dùng 26 thư viện sau:
Trang 35Để sử dụng một thư viện nào đó, ta khai báo như sau:
Trong đó, lib_name là tên của thư viện.Ví dụ, để sử dụng thư viện Form
Validation, ta khai báo:
Sau khi khai báo, ta có thể truy xuất đến các phương thức của thư viện bằng cách gọi:
Trang 36 Thêm một th ư viện mới
CodeIgniter cho phép lập trình viên tạo các thư viện mới, mở rộng hoặc thay thế các thư viện sẵn có Các thư viện do lập trình viên tạo ra sẽ được lưu trong thư mục application/libraries Lưu ý: thư viện Database và Loader không thể mở rộng hoặc thay thế
Khi khai báo một lớp thư viện, cần tuân theo các quy tắc sau:
Tên tập tin phải được viết hoa, ví dụ: Someclass.php
Khi khai báo lớp, tên lớp phải được viết hoa ký tự đầu tiên, ví dụ:
class Someclass Tên lớp và tên tập tin phải trùng nhau.
Để có thể sử dụng các thư viện, helper, plugin của CodeIgniter trong thư viện mới, ta không thể dùng khai báo $this->load->xxx() vì lớp thư viện mới là một lớp độc lập và không có thuộc tính load Để giải quyết vấn đề này,
ta sẽ khai báo như sau:
Sau khi đã có đối tượng $CI, ta có thể khai báo sử dụng tài nguyên của CodeIgniter như bình thường
Các helper và plugin
Helper là tập hợp những hàm tiện ích được xây dựng nhằm hỗ trợ lập
trình viên thực hiện một số công việc nào đó Chẳng hạn, URL Helper giúp
tạo liên kết, Form Helper giúp tạo form, Cookie Helper giúp xử lý
cookie…Các helper không được xây dựng thành từng lớp đối tượng, đơn giản chúng là tập hợp những hàm thủ tục được phân thành từng nhóm
Trang 37riêng biệt, và chúng không phụ thuộc vào nhau.
Các helper của CodeIgniter được lưu trong thư mục system/helpers Lập trình viên có thể tự xây dựng riêng các helper cho mình, hoặc sử dụng
helper được chia sẻ trên mạng Các helper này được lưu trong thư mục
system/application/helpers Khi khai báo sử dụng một helper nào đó, trước
tiên CodeIgniter sẽ tìm trong thư mục system/application/helpers, nếu không tìm thấy sẽ chuyển sang tìm trong thư mục system/helpers
Để sử dụng một helper, ta khai báo như sau:
Trong đó, helper_name là tên của helper, bỏ đi phần “.php” hoặc “_helper” Chẳng hạn để sử dụng URL Helper, là tập tin có tên url_helper.php, ta khai báo:
Để sử dụng nhiều helper cùng lúc, ta có thể khai báo như sau:
Một helper có thể được khai báo ở bất cứ đâu, thậm chí trong một tập tin view Nhưng tốt hơn là nên khai báo helper trong các lớp controller Sau khi khai báo,ta có thể sử dụng các hàm của helper CodeIgniter cho phép lập trình viên mở rộng các helper sẵn có bằng cách tạo một tập tin trùng tên với tên của helper cần mở rộng, và có thêm tiền tố MY_.Tiền tố này có thể được thay đổi bằng cách thiết lập giá trị biến $config['subclass_prefix'] trong tập tin application/config/config.php Lưu ý: CI_ là tiền tố mặc định
của CodeIgniter, ta không nên sử dụng
Plugin có chức năng tương tự như helper Điểm khác biệt là plugin
thường chỉ có duy nhất một hàm, trong khi helper là tập hợp các hàm cùng
Trang 38thực hiện một loại tác vụ nào đó Các plugin được lưu trong thư mục
system/plugins, hoặc
system/application/plugins Khi sử dụng plugin, CodeIgniter sẽ tìm trong
thư mục system/application/plugins trước, sau đó đến thư mục
system/plugins.
Để sử dụng plugin, ta khai báo như sau:
Trong đó, plugin_name là tên của helper, bỏ đi phần “.php” hoặc “plugin”
Chẳng hạn để sử dụng Captcha plugin, là tập tin có tên captcha_pi.php, ta khai báo:
Ta cũng có thể sử dụng nhiều plugin cùng lúc bằng cách khai báo:
Tự động khai báo
CodeIgniter hỗ trợ chức năng cho phép tự động khai báo sử dụng các helper, plugin, library, model, các tập tin ngôn ngữ và các tập tin cấu hình mỗi khi hệ thống hoạt động Để sử dụng chức năng này, ta thiết lập trong tập tin
system/application/config/autoload.php Ví dụ, để tự động sử dụng URL Helper, Form Helper, ta thiết lập như sau:
Trang 39CodeIgniter còn có cơ chế cho phép ghi lỗi thành tập tin văn bản để thuận tiện cho việc lưu trữ cũng như sửa lỗi.
CodeIgniter hỗ trợ các hàm sau để xử lý lỗi:
Hàm show_error() sẽ hiển thị thông báo lỗi với mẫu là tập tin
application/errors/error_general.php Biến tùy chọn $status_code cho phép
thiết lập
mã trạng thái HTTP của lỗi này, mặc định là 500 (Internal Server Error)
Hàm show_404() sẽ hiển thị thông báo không tìm thấy tài nguyên yêu cầu với mẫu là tập tin application/errors/error_404.php $path cho biết đường dẫn của tài nguyên Hàm này sẽ được tự động gọi khi hệ thống không tìm thấy controller
Hàm log_message() cho phép lưu các thông báo xuống tập tin văn bản Có
3 loại thông báo:
Thông báo lỗi ($level = 'error'): Đây là những lỗi thực sự xảy ra trong
hệ thống, có thể là lỗi của PHP hoặc của người dùng
Thông báo gỡ lỗi ($level = 'debug'): Đây là những thông báo hỗ trợ cho việc tìm và sửa lỗi Chẳng hạn, khi một lớp được khởi tạo, ta cóthể lưu thông tin này lại để giúp cho việc gỡ lỗi sau này
Thông báo chung ($level = 'info'): Cấp độ thấp nhất, cung cấp thông tin đơn giản, đôi khi mang tính chất ghi chú
Lưu ý: Để có thể ghi xuống tập tin văn bản, thư mục system/logs phải được
cho phép ghi (writable)
Trang 40 Bảo mật
Cơ chế bảo mật chặt chẽ của CodeIgniter giúp lập trình viên có thể yên tâm khi xây dựng ứng dụng Để phòng ngừa các phương thức tấn công phổ biến như XSS hay SQL Injection, CodeIgniter chỉ cho phép các ký tự sau xuất hiện trong URI:
này, giá trị magic_quotes_runtime trong tập tin php.ini cũng được gán giá trị
off Điều này giúp cho lập trình viên không phải lọc các ký tự escape khi đọc thông tin từ cơ sở dữ liệu
L ưu trữ bộ đệm
Lưu trữ bộ đệm (caching) giúp tối ưu hóa hiệu suất của hệ thống Dù cho tốc độ xử lý của CodeIgniter không nhanh, nhưng khi thực hiện các thao tác truy xuất dữ liệu, CodeIgniter vẫn phải sử dụng các tài nguyên của hệ thống như bộ nhớ,dung lượng đĩa…Bằng cách kích hoạt chức năng lưu trữ vào bộđệm, tốc độ tải trang của CodeIgniter có thể tương đương với các trang web tĩnh.Về căn bản, tất cả các trang đều được lưu trong bộ đệm Lập trình viên
có thể thiết lập thời gian tồn tại của trang trong bộ đệm trước khi trang