Các phần mềm này đã phát huy tác dụng lớn nhưng khi gặp phải vấn đề mở rộng hệ thống thì DNlại lúng túng không biết kết nối chúng với nhau như thế nào để có thể dùng chung thông tin, giả
Trang 1LUẬN VĂN TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG QUẢN LÝ NHÂN SỰ TRÊN NỀN
FRAMEWORK YII
Chuyên ngành: Hệ thống thông tin
Giảng viên hướng dẫn :Th.S Nguyễn Lương Anh Tuấn
Trang 2viên hướng dẫn là Th.S Nguyễn Lương Anh Tuấn Các nội dung nghiên cứu và kết quả trong đề tài này là trung thực Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tôi thu thập từ các nguồn khác nhau
có ghi trong phần tài liệu tham khảo Ngoài ra, đề tài còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả, cơ quan tổ chức khác, và
cũng được thể hiện trong phần tài liệu tham khảo
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm trước Hội đồng, cũng như kết quả luận văn của mình
TP.HCM, ngày 26 tháng 12 năm 2013
Sinh viên thực hiện
Nguyễn Thị Tuyền
Trang 3cùng quý thầy cô Khoa Công Nghệ Thông Tin Trường Đại học Giao thông Vận tải TP.HCM đã chỉ bảo và truyền đạt cho em những kiến thức quý báu trong suốt hai năm học vừa qua.
Đặc biệt em xin chân thành cám ơn Thầy giáo Nguyễn Lương Anh Tuấn giảng viên bộmôn Công nghệ thông tin Trường Đại học Giao Thông Vận Tải TP HCM đã tận tình giúp đỡ em trong quá trình thực hiện đề tài tốt nghiệp
Em cũng gửi lời cám ơn sâu sắc đến những người thân trong gia đình, các anh chị nơi làm việc và bạn bè đã ủng hộ, giúp đỡ và động viên em trong những lúc khó khăn, cũng như trong suốt những năm học vừa qua
Mặc dù đã cố gắng hoàn thành đề tài với tất cả sự nổ lực của bản thân, nhưng chắc chắn không tránh khỏi những thiếu sót nhất định, kính mong sự cảm thông và tận tình chỉ bảo của quý Thầy Cô
Em xin chúc trường Đại học Giao thông Vận tải thành phố Hồ Chí Minh trở thành một đơn vị giáo dục vững mạnh, đào tạo ra nhiều kỹ sư tài năng cho đất nước
Cuối cùng em xin kính chúc toàn thể quý thầy cô nhà trường dồi dào sức khoẻ, gặp nhiều thuân lợi trong công tác cũng như trong cuộc sống
Em xin chân thành cám ơn
TP HCM ngày 26 tháng 12 năm 2013
Sinh viên thực hiệnNguyễn Thị Tuyền
Trang 4
NHẬN XÉT CỦA GIÁO VIÊN
Trang 5
MỤC LỤC
Trang 7Ứng dụng từng phần hay tổng thể
Nhiều DN trong thời gian qua đã tích cực đầu tư trang bị nhiều phần mềm riêng lẻ phục vụ cho các mục đích quản lý khác nhau như: Kế toán, quản lý bán hàng, quản lý kho, điều hành thông tin nội bộ, quản lý nhân sự, lập kế hoạch sản xuất Các phần mềm này đã phát huy tác dụng lớn nhưng khi gặp phải vấn đề mở rộng hệ thống thì DNlại lúng túng không biết kết nối chúng với nhau như thế nào để có thể dùng chung thông tin, giảm công sức nhập dữ liệu đầu vào, và có được thông tin đầu ra tổng hợp hơn
Thực tế có nhiều DN VN hiện nay đã tin học hóa một số khâu trong hoạt động sản xuất kinh doanh như mua phần mềm kế toán, quản lý nhân sự theo cách áp dụng từng phần, nghĩa là cần chỗ nào thì bịt chỗ đó mà chưa có kế hoạch hay chiến lược tổng thể,
do đó kết quả là giải quyết được vấn đề này thì phát sinh vấn đề khác Điều này một
Trang 8phần do kinh phí đầu tư, năng lực của nhà cung cấp và triển khai giải pháp, quan trọng hơn hết là nhận thức và tư duy của lãnh đạo doanh nghiệp.
Việc áp dụng hệ thống quản lý nhân sự, quản lý kinh doanh, quản trị sản xuất và tổngthể hơn là ERP (Enterprise Resource Planning - Hệ thống hoạch định nguồn lực DN) hoặc hệ thống quản lý ISO có thể thực hiện từng phần, nhưng lựa chọn giải pháp gì và nhà cung cấp nào là việc làm có tính tổng thể, tránh trường hợp khi mở rộng, doanh nghiệp phải bỏ cái cũ và xây cái mới từ đầu
Mua và áp dụng phần mềm thường rất dễ dàng?
Phần lớn các DN Việt Nam là các doanh nghiệp vừa và nhỏ (kể cả siêu nhỏ) tuy khả năng tiếp cận với các hệ thống quản lý chuyên nghiệp đã dễ dàng hơn nhưng kinh nghiêm quản lý, qui trình quản lý, hệ thống quản lý chưa được áp dụng một cách có khoa học và triệt để, do đó khi thay đổi mô hình quản lý thuận tiện (có khi tuỳ tiện) sang mô hình quản lý theo mục tiêu, theo qui trình… thường gặp rất nhiều khó khănMột phần mềm có sẵn để áp dụng cho doanh nghiệp có vẻ là 1 giải pháp đơn giản và
dễ dàng, bởi lẽ phần mềm có sẵn thì thường được sử dụng đại trà và bán với giá khá hấp dẫn Có thể thấy các dạng phần mềm đóng gói như Microsoft Windows, Office, Accounting, HRM có mặt rất nhiều trên thị trường, đặc biệt với phần mềm Kế Toán, Nhân Sự… các doanh nghiệp CNTT phát triển sản phẩm với tính năng gần như là tương đồng với nhau và thường khác ở tên gọi mà doanh nghiệp muốn xây dựng thương hiệu Đặc điểm chung của phần mềm có sẵn này thường giới hạn bởi các chức năng, người sử dụng phần lớn phải theo qui trình sẵn trên phần mềm, ít nhà cung cấp phần mềm cung cấp thêm theo các yêu cầu riêng của từng khách hàng ( nếu yêu cầu riêng chi phí sẽ tăng lên)
Sự hiểu biết không rõ ràng cùng với kinh phí đầu tư lớn cho dự án buộc DN phải cân nhắc kỹ trước khi quyết định
Trang 9Việc mua phần mềm đóng gói và tự triển khai hoặc chính đơn vị viết phần mềm đi triển khai là không quá khó, tuy nhiên nó chỉ phù hợp với những ứng dụng nhỏ và đơn giản Những ứng dụng lớn hơn buộc phải có sự can thiệp của các công ty có bề dày kinh nghiệm cũng như cần có góc nhìn rộng hơn thay vì chỉ là một phần mềm
Mua phần mềm hay mua giải pháp ?
Có rất nhiều DN đã trải qua việc áp dụng phần mềm nhiều lần không thành công Lý
do là vì ở nhiều nhiều doanh nghiệp áp dụng phần mềm nhưng chưa có hệ thống, qui trình chuẩn trước đó Những doanh nghiệp triển khai thành công, điểm chung của họ là
đã có hệ thống quản lý, khi đó phần mềm chỉ là công cụ để thay thế hoạt động trên giấysang hoạt động trên máy
Quyết tâm của Ban lãnh đạo là yếu tố không nhỏ trong việc triển khai giải pháp CNTT,việc triển khai thời gian đầu sẽ ảnh hưởng nhất định đến hiệu suất công việc chung, do
đó nếu thiếu quyết tâm và sợ khó, việc triển khai sẽ gặp rất nhiều khó khăn
Ngoài ra, người sử dụng cũng cần được trang bị những kiến thức, tư duy mở, thích nghi với sự thay đổi ngoài việc chỉ hướng dẫn làm thế nào để sử dụng phần mềm Tư duy người sử dụng không mở cũng sẽ là một rào cản rất lớn cho việc ứng dụng CNTT trong doanh nghiệp
Như vậy, doanh nghiệp cần một giải pháp tổng thể và có thể thực hiện từng bước đơn
lẻ thay vì chỉ nghĩ đến phần mềm, việc tin học hoá hoạt động của doanh nghiệp đơn giản là dùng CNTT làm công cụ chuyển hoá hoạt động trên giấy sang hoạt động trên máy để tận dụng sự ưu việt của công nghệ thông tin
Xuất phát từ hiện trạng nơi công ty em làm việc, em xin phát triển một ứng dụng quản
lý nhân sự “ xây dựng ứng dụng quản lý nhân sự trên nền framework Yii”
Trang 10Do kiến thức và kinh nghiệm của bản thân còn hạn chế nên việc thực hiện không thể tránh khỏi những thiếu xót Rất mong được sự đóng góp ý kiến của quý thầy cô trong
bộ môn công nghệ thông tin trường Đại học Giao Thông Vận Tải cùng toàn thể bạn bè
để đề tài em càng hoàn thiện và ứng dụng thực tiễn một cách tốt nhất
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
Tên đề tài: Quản lý nhân sự (Employee System Management )
Trang 11Xuất phát từ nhu cầu quản lý nhân viên với văn phòng, giảm tải công việc hàng ngày cho người quản lý, chuyển hoá hoạt động trên giấy sang hoạt động trên máy
để tận dụng sự ưu việt của công nghệ thông tin, ứng dụng này sẽ thực hiện việc quản lý nhân viên, thông tin hồ sơ(profile), đăng ký ngày nghỉ (vacation), gửi thông báo, quản lý hợp đồng…
- Tìm kiếm thông tin nhân viên, xuất excel danh sách nhân viên
- Tìm kiếm thông tin hợp đồng, xuất excel danh sách hợp đồng
- Tìm kiếm thông tin hồ sơ nhân viên, xuất file excel danh sách, xuất file pdf chi tiết hồ sơ nhân viên
- Thay đổi mật khẩu, quên mật khẩu
- Tính toán lương từ Net sang Gross và ngược lại
- Tìm hiểu framework Yii, cơ sở dữ liệu Mysql
CHƯƠNG 2: GIỚI THIỆU CÔNG NGHỆ
Trang 122.1. Ngôn ngữ lập trình PHP
2.1.1 Định nghĩa
PHP là chữ viết tắt của “ Personal Home Page” do Rasmus Lerdorf tạo ra năm
1994 Vi tính hữu dụng và khả năng phát triển, PHP bắt đầu được sử dụng trong môi trường chuyên nghiệp và nó trở thành PHP : “Hypertext Preprocessor”
Là một ngôn ngữ lập trình kịch bản hay một loại mã 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ổngquát Nó rất thích hợp với web và 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ống C
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
PHP là mã nguồn mở do đó tất cả các đặc tính đều miễn phí, vì vậy mà có một cộng đồng rộng lớn luôn cải tiến và khắc phục lỗi
2.1.2 Lịch sử phát triển
2.1.2.1. 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 1995, 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 PageTools' Khi cần đến các chức năng rộng hơn, Rasmus đã viết ra một bộ thực thibằ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 Rasmus đã quyết định công bố mã
Trang 13nguồn của PHP/FI cho mọi người xem, sử dụng cũng như sửa các lỗi có trong
nó đồng thời cải tiến mã nguồ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 nay Nó có các biến kiểu như Perl, thông dịch tự động các biến của form và cú pháp HTML nhúng Cú pháp này giống như của Perl, mặc dù hạn chế hơn nhiều, đơn giản
và có phần thiếu nhất quán
Và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 lâu sau
đó, nó đã được thay thế bởi các bản alpha đầu tiên của PHP 3.0
2.1.2.2 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 đó
Lý do chính mà họ đã tạo ra phiên bản này là do nhận họ thấy PHP/FI 2.0 hết sức yếu kém trong việc phát triển các ứng dụng thương mại điện tử mà họ đang xúc tiến trong một dự án của trường đại học Trong một nỗ lực hợp tác vàbắt đầu xây dựng dựa trên cơ sở người dùng đã có của PHP/FI, Andi, Rasmus
và Zeev đã quyết định hợp tác và công bố PHP 3.0 như là phiên bản thế hệ kế tiếp của PHP/FI 2.0, và chấm dứt phát triển PHP/FI 2.0
Trang 14Một trong những sức mạnh lớn nhất của PHP 3.0 là các tính năng mở rộng mạnh mẽ của nó Ngoài khả năng cung cấp cho người dùng cuối một cơ sở hạ tầng chặt chẽ dùng cho nhiều cơ sở dữ liệu, giao thức và API khác nhau, các tính năng mở rộng của PHP 3.0 đã thu hút rất nhiều nhà phát triển tham gia và
đề xuất các mô đun mở rộng mới Hoàn toàn có thể kết luận được rằng đây chính là điểm mấu chốt dẫn đến thành công vang dội của PHP 3.0 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
dữ liệu và API của bên thứ ba, nhưng PHP 3.0 đã không được thiết kế để xử lý các ứng dụng phức tạp như thế này một cách có hiệu quả
Trang 15Mộ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 độ 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
Nhóm phát triển PHP cũng đã lên tới con số hàng nghìn người và nhiều nghìn người khác tham gia vào các dự án có liên quan đến PHP như PEAR, PECL vàtài liệu kĩ thuật cho PHP
2.1.2.4. 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 Một thảo luận trên Slashdot đã cho thấy việcphát triển PHP 5.0 có thể đã bắt đầu vào thời điểm tháng 12 năm 2002 nhưng những bài phỏng vấn Zeev liên quan đến phiên bản này thì đã có mặt trên mạng Internet vào khoảng tháng 7 năm 2002 Ngày 29 tháng 6 năm 2003, PHP
5 Beta 1 đã chính thức được công bố để cộng đồng kiểm nghiệm Đó cũng là
Trang 16phiên bản đầu tiên của Zend Engine 2.0 Phiên bản Beta 2 sau đó đã ra mắt vàotháng 10 năm 2003 với sự xuất hiện của hai tính năng rất được chờ đợi:
Iterators, Reflection nhưng namespaces một tính năng gây tranh cãi khác đã bị loại khỏi mã nguồn Ngày 21 tháng 12 năm 2003: PHP 5 Beta 3 đã được công
bố để kiểm tra với việc phân phối kèm với Tidy, bỏ hỗ trợ Windows 95, khả năng gọi các hàm PHP bên trong XSLT, sửa chữa nhiều lỗi và thêm khá nhiều hàm mới PHP 5 bản chính thức đã ra mắt ngày 13 tháng 7 năm 2004 sau một chuỗi khá dài các bản kiểm tra thử bao gồm Beta 4, RC 1, RC2, RC3 Mặc dù coi đây là phiên bản sản xuất đầu tiên nhưng PHP 5.0 vẫn còn một số lỗi trong
đó đáng kể là lỗi xác thực HTTP
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à SP
2.1.2.5. PHP 6
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 chư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
- SQL là chuẩn ngôn ngữ ANSI để truy cập cơ sở dữ liệu
Trang 17- SQL là viết tắt của Structured Query Language – là một hệ quản trị cơ sở dữ liệu mở, hoàn toàn miễn phí MySQL được sử dụng phổ biến trong lập trình website động với PHP, chúng ta hay gọi chung là lập trình PHP & MySQL.
- MySQL cung cấp cho chúng ta cách truy vấn, thao tác với dữ liệu tương tự như SQL nhưng ở mức độ đơn giản hơn
Cấu trúc dữ liệu MySQL :
- MySQL lưu trữ dữ liệu theo dạng bảng
- Mỗi cơ sở dữ liệu bao gồm 1 hoặc nhiều bảng
- Mỗi bảng chứa một hoặc nhiều cột để lưu trữ giữ liệu, cột có thuộc tính như:kiểu dữ liệu là gì, khóa chính, chiều dài dữ liệu, …
- Dòng là tập hợp giá trị của tất cả các cột trong bảng, một bảng thường bao gồm rất nhiều record
- Một số kiểu dữ liệu phổ biến thường được sử dụng trong MySQL
Kiểu dữ liệu Mô tả
Trang 18INT Định dạng kiểu số nguyên có chiều dài từ 0 –
4294967214Float Định dạng số thực có chiều dài 4 bytes
Double Định dạng số thực có chiều dài 8 bytes
Char Định dạng text chiều dài từ 0 – 255
Varchar Định dạng text có chiều dài từ 0 – 255
Text Định dạng text có chiều dài từ 0 – 65535
Longtext Định dạng text có chiều dài 0 – 4294967214
Date Lưu trữ thời gian theo định dạng YYYY-MM-DD
DateTimeTimeStamp Lưu trữ thời gian theo định dạng YYYY-MM-DD
HH:MM:SSDecimal Lưu trữ số thực theo đinh dạng chứa dấu “,”
Bảng 1.2: Một số kiểu dữ liệu thường dùng trong MySql
Có các tính năng sau:
- Cho phép truy cập dữ liệu
- Thực hiện các câu truy vấn
- Tạo mới, cập nhật, xóa dữ liệu
2.3.1 Khái quát
- Yii là PHP framework hỗ trợ tốt cho việc phát triển Web 2.0
Trang 19- Yii giúp nhà phát triển xây dựng những ứng dụng phức tạp với thời gian nhanh nhất
- Yii được phát âm là Yee hoặc [ji:], Yii là viết tắt của “Yes It Is!” Ý nghĩa của nó là “Is it fast? Is it secure? Is it professional? Is it right for my next project? Yes, it is!”
- Yii hoàn toàn miễn phí, là ứng dụng Web mã nguồn mở được phát triển bằngngôn ngữ PHP5 Yii giúp cho việc phát triển ứng dụng Web tuân theo một khuôn khổ nhằm đảm bảo tính hiệu quả, tính mở rộng, và tính bảo trì của sảnphẩm
- Tối ưu hiệu suất, Yii là sự lựa chọn hoàn hảo cho các dự án có quy mô Yii cho phép nhà phát triển kiểm soát toàn bộ cấu hình Yii cung cấp các công
cụ giúp kiểm tra và sửa lỗi ứng dụng dễ dàng
2.3.2 Lịch sử
Yii được sáng lập bởi Qiang Xue, người trước đây đã phát triển và bảo trìPrado framework Dự án Yii được bắt đầu từ ngày 01/01/2008 và sau gầnmột năm phát triển, ngày 03/12/2008 Yii 1.0 được chính thức phát hành
2.3.3 Ý tưởng
Yii kết hợp nhiều ý tưởng từ các framework và các ứng dựng Web nổi tiếng khác.Dưới đây là một số ý tưởng Yii đã tham khảo:
- Prado: là nguồn gốc chủ yếu cho ý tưởng phát triển Yii, bao gồm:
component và mô hình lập trình hướng sự kiện, các lớp database, mô hình kiến trúc ứng dụng, i18n và l10n, và nhiều tính năng khác
- Ruby on Rails: Yii kế thừa quy ước về cấu hình
Trang 20- jQuery: được tích hợp trong Yii framework
- Symfony: Yii kế thừa ý tưởng về filter và kiến trúc plug-in
- Joomla: Yii kế thừa cách thiết kế module và message translation
- Là framework ngôn ngữ PHP, mà điểm nhấn của nó là khả năng mở rộng, khả năng tái sử dụng
- Khả năng tái sử dụng và mở rộng của Yii rất cao Yii là 1 Framework hoàn toàn hướng đối tượng Mọi thứ trong Yii đều có thể tái sử dụng và mở rộng rất dễ dàng
- Yii hỗ trợ trên tất cả các DBMS bởi PDO (PHP Data Object)
Hiệu suất xử lý của Framework Yii hiệu quả cao Biểu đồ dưới đây cho thấy hiệuquả hơn hẳn so với các Framework PHP khác RPS là viết tắt của “Request per second” nhằm mô tả việc làm mới ứng dụng có thể xử lý trong mỗi giây
Trang 21Biểu đồ 2.2: So sánh hiệu suất xử lý các framework “Nguồn www.phpide.com (2008)”Các thành phần chính của Yii:
Trang 222.3.3.1. Luồng xử lý logic
Biểu đồ 3.2: Luồng xử lý yêu cầu trong YII “Nguồn http://www.yiiframework.com/”
Về cơ bản, cách làm việc của Yii được thực hiện qua các bước sau:
- Yêu cầu (request) của người dùng được trình duyệt gửi cho Web server Web server chuyển tiếp request cho index.php xử lý Index.php có chức năng tạo một thực thể Application và thực thi nó
- Application tạo ra các App Component (App Component là các thành phần của ứng dụng, vd: UrlManager, HttpRequest)
- App Component gửi các thành phần của mình cho Application quản lý
Trang 23- Application xác định các controller và action từ request và gửi chúng cho UrlManager quản lý Tiếp đến Application tiến hành thực thi controller
- Controller có thể tạo ra các model để xử lý dữ liệu
- Model gửi dữ liệu cho Controller
- Controller gửi các biến, các thể hiện của model cho View
- View tạo ra các Widget
- View thực hiện trình bày trang web
Đôi khi chúng ta cần thay đổi workflow để tùy biến trang web Yii cho phép chúng ta làm được điều này qua workflow sau:
Biều đồ 4.2: Luồng xử lý yêu cầu khác trong YII “Nguồn http://www.yiiframework.com/”
Application
App components
Trang 24Yii của Application là để giải quyết các request của người dùng Gửi chúng cho controller thích hợp để tiếp tục xử lý Application là trung tâm quản lý toàn bộ cấu hình của ứng dụng.
Các công việc chủ yếu của Application là:
+ Chuẩn bị khởi tạo Application (Pre-initializes the application)
+ Thiết lập autoloader và điều khiển error (Set up class autoloader and error handling)
+ Đăng ký các App Component cốt lõi (Register core application
components)
+ Nạp cấu hình ứng dụng (Load application configuration)
+ Khởi tạo Application (Initialize the application)
+ Raise onBeginRequest event
+ Xử lý request của người dùng (Process the user request)
+ Giải quyết request của người dùng (Resolve the user request)
+ Tạo và thực thi Controller (Create & Run controller)
+ Raise onEndRequest event
Để cấu hình Application ta sử dụng file (hoặc array) để khởi tạo giá trị của các thuộc tính File cấu hình được chứa trong thư mục
protected/config/main.php của ứng dụng Cấu trúc như sau:
Trang 25Hình 4.2: Cấu hình application trong file main
Controller:
Controller của Yii gồm có 2 thành phần cơ bản là Filter và Action
Action
Action là các phương thức có tên bắt đầu là action (ví dụ: actionIndex)
Ngoài ra, Yii còn hỗ trợ cách viết các action nâng cao hơn bằng cách tổ chức các action theo kiểu mô-đun hóa Ta có thể xem cấu trúc thư mục sau:
Biểu đồ 5.2: Cấu trúc thư mục trong YII “Nguồn: The Denitive Guide”
Trang 26 Filter
Là phương thức được xử lý trước (hoặc sau) khi thực thi action Trong Yii, một action có thể có nhiều filter Filter có thể ngăn chặn việc thực thi các action
Để khai báo filter ta sử dụng phương thức filters() Xem ví dụ:
Hình 6.2: Cách khai báo filter trong YIITại ví dụ trên, ta tạo một filter AccessControl cho toàn bộ các action thuộc controller Post Phương thức filterAccessControl sẽ được thực thi trước các action của controller Post
Ngoài ra, ta có thể tùy biến sử dụng filter bằng cách sử dụng toán tử cộng (+)
và trừ (-) Toán tử (+) cho phép filter đó được áp dụng đối với controller kèm theo Toán tử (-) cho phép filter đó được áp dụng cho tất cả các action ngoại trừ action kèm theo Xem ví dụ:
class PostController extends CController {
public function filters () {
return array (
‘ accessControl ’ , );
Trang 27Hình 7.2: Ví dụ filter checkAdmin
Ví dụ trên cho thấy, filter CheckAdmin sẽ được áp dụng cho 2 action update
và delete Filter CheckLogin sẽ được áp dụng cho tất cả các action của controller Post ngoại trừ action view
Ngoài ra, Yii còn hỗ trợ cách viết các filter nâng cao hơn bằng cách tổ chức các filter theo kiểu mô-đun hóa (tương tự phần action)
Component
Ứng dụng Yii được xây dựng dựa trên các Component Sử dụng các Componentchủ yếu liên quan đến việc truy cập các thuộc tính của nó và nâng cao xử lý sự kiện Component là đối tượng quản lý Event và Behavior
Trang 28 Model
- Nhiệm vụ chính của model là lưu dữ liệu và các quy tắc business liên quan
- Model đại diện cho một đối tượng dữ liệu duy nhất Nó có thể là một hàng (row)trong bảng (table) cơ sở dữ liệu hoặc là một input form của người dùng
- Mỗi trường (field) của đối tượng được biểu diễn thành một thuộc tính (property)trong model Thuộc tính này có một nhãn (label) và có thể được xác lập một quytắc xác thực (validate)
Yii hỗ trợ 2 loại model
+ FormModel: sử dụng cho việc xử lý các form input của người dùng Các
dữ liệu này thường được xử lý và sau đó bỏ đi Ví dụ: trên một trang đăng nhập, ta chỉ sử dụng model cho việc kiểm tra nhân viên
+ ActiveRecord: sử dụng cho việc truy cập cơ sở dữ liệu trừu tượng
Working with model
Để làm việc với model, ta cần chú ý đến các vấn đề sau:
Các quy tắc xác thực (Validation Rules)Relational Active Record
Một vài phương thức liên quan đến truy vấn CSDL
a) Validation Rules (Các quy tắc xác thực)
Để khai báo quy tắc xác thực, trong model ta sử dụng phương thức rules() trả
về một array chứa các quy tắc Xem ví dụ:
Trang 29Hình 8.2: Ví dụ khai báo quy tắc nhập dữ liệuVới ví dụ trên, ta khai báo quy tắc required cho 2 thuộc tính username, password (quy tắc này yêu cầu người dùng phải nhập liệu cho 2 thuộc tính, không được phép để trống) Ngoài ra, thuộc tính password còn được khai báo quy tắc authenticate (quy tắc này sẽ thực thi phương thức authenticate đểkiểm tra password có đúng không).
Có 3 loại quy tắc xác thực (Validator) sau:
o Validator có thể là tên của một phương thức trong model (như ví dụ trên,
sử dụng phương thức authenticate)
o Validator có thể là tên của một lớp (class) validator
o Validator có thể là một bí danh được xác định trước của Yii (như ví dụ trên, sử dụng bí danh required)
b) Relational Active Record
array('username, password ', ' required '),
array('password ', ' authenticate '),
Trang 30Phần này sẽ được giới thiệu chi tiết hơn trong phần Active Record (Working with Database)
c) Một vài phương thức liên quan đến truy vấn CSDL
View là một PHP script bao gồm chủ yếu là các yếu tố giao diện người dùng
Nó có thể chứa các câu lệnh PHP đơn giản nhưng chỉ với mục đích trình bày
Làm việc với view cần chú ý đến các phương thức sau:
• Public methods
- render(): Renders a view with a layout
Trang 31View Model
- renderDynamic(): Renders dynamic content returned by the specified callback
- renderDynamicInternal(): This method is internally used
- renderFile() or renderInternal(): Renders a view file
- renderPartial(): Renders a view
- renderText(): Renders a static text string
Trang 32MVC ( model-view-controller)
- MVC là một mô hình kiến trúc phần mềm được sử dụng phổ biến trong phát triển ứng dụng Web Mục đích chính của MVC là:
- Tách riêng các thành phần logic với giao diện người dùng
- Giúp cho việc thay đổi các thành phần dễ dàng mà không làm ảnh hưởng đến các thành phần khác
- Dễ dàng phát triển và bảo trì ứng dụng
Model
Là thể hiện của một cấu trúc dữ liệu cơ bản Model được sử dụng để lưu trữ
dữ liệu và các quy tắc business liên quan
Model đại diện cho một đối tượng dữ liệu duy nhất Nó có thể là một row trong database table hoặc là một form input của người dùng Mỗi trường (field) của object là một thuộc tính (attribute) của model
View chủ yếu là các yếu tố giao diện người dùng Chịu trách nhiệm trình bàycác thể hiện của model ở dạng mà người dùng mong muốn Nó có thể chứa các câu lệnh (PHP, ASP, …) nhưng chỉ với mục đích trình bày
Controller
Công việc chủ yếu của controller là điều kiển, xử lý các request của người dùng Liên kết model với view Kiểm soát các response
Trang 33 Best MVC Practices
Hình 10.2: So sánh 2 mô hình MVCMột mô hình MVC tốt thì cần phải thực hiện đúng các nguyên tắc sau:
Model
Chứa các thuộc tính đại diện cho các dữ liệu cụ thể
Chứa các business logic nhằm đảm bảo các dữ liệu đáp ứng được yêu cầu thiết kế
Có thể chứa các mã thao tác với database