Tải bản đầy đủ (.doc) (31 trang)

BÀI TẬP LỚN MÔN KIẾN TRÚC PHẦN MỀM Nghiên cứu, tìm hiểu và xây dựng tài liệu kiến trúc của Framework nguồn mở Yii

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 (289.57 KB, 31 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
  
BÀI TẬP LỚN
MÔN: KIẾN TRÚC PHẦN MỀM
Nghiên cứu, tìm hiểu và xây dựng tài liệu kiến trúc của Framework
nguồn mở Yii
Giáo viên hướng dẫn: TS. Cao Tuấn Dũng
Học viên thực hiện : Vũ Văn Soái CB120109
Phạm Văn Phong CB120103
Nguyễn Quỳnh Vân CB120123
Lê Thị Trang CB120118
Nguyễn Văn Chiến CB121349
Nguyễn Văn Thông CB121357
Lớp: Công nghệ thông tin 2 (KT)
Chuyên ngành: Công nghệ thông tin (KT)
HÀ NỘI 04 – 2013
Trang 1
MỤC LỤC
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI 1
LỜI NÓI ĐẦU 3
CHƯƠNG 1. TỔNG QUAN VỀ YII 4
1.1. Yii là gì? 4
1.2. Đặc tính 4
1.3. Ưu Điểm 6
1.4. Cài đặt Yii 8
CHƯƠNG 2. CÁC TÍNH NĂNG CỦA YII FRAMEWORK 9
2.1. Mô hình thiết kế Model-View-Controller (MVC) 9
2.2. Database Access Objects (DAO), Query Builder, Active Record, DB Migration
18
2.3. Form nhập và kiểm tra (validate) 18


2.4. Các widget hỗ trợ Ajax(AJAX-enabled widgets) 20
2. 5. Xác thực và phân quyền 22
2. 6. Giao diện 22
2. 7. Web services 23
2. 8. Đa ngôn ngữ (I18N) và địa phương hóa (L10N) 23
2.9. Lớp hỗ trợ cache 24
2.10. Xử lý lỗi và Log 24
2.11. Bảo mật 24
2.12. Kiểm thử 24
2.13. Tự động tạo code (Automatic code generation) 25
2.14. Tuân thủ theo XHTML 25
2.15. Thuần hướng đối tượng 25
2.16. Dễ dàng sử dụng với code của bên cung cấp thứ 3 25
2.17. Tài liệu chi tiết 25
2.18. Hệ thống thư viện mở rộng 25
CHƯƠNG 3. SO SÁNH YII VÀ CÁC FRAME KHÁC 28
Trang 2
LỜI NÓI ĐẦU
Nhiều năm qua đã đánh dấu “sự bùng nổ của các Framework”, và hầu như
tất cả mọi người tham gia phát triển ứng dụng web ngày nay là một phần của thế
hệ "Framework”. Một Framework PHP dễ dàng hơn, mở rộng hơn và hiệu quả
hơn để đáp ứng nhu cầu ngày càng tăng của các nhà phát triển ứng dụng Web là
điều cần thiết. Vì vậy Yii Framework đã ra đời để đáp ứng các nhu cầu trên.
Cho dù là một developer, phát triển một website nhỏ, đơn giản hay một
nhóm developer phát triển một website đòi hỏi sự phức tạp cao, thì sử dụng Yii
framework cũng có thể tăng thêm cho nhóm phát triển về các kinh nghiệm bổ
sung, sự chuyên nghiệp và nguồn tài nguyên hiệu quả. Tất cả đều miễn phí.
Chúng ta chỉ tập trung giải quyết tốt các nhiệm vụ cụ thể được yêu cầu mà
không phải quan tâm vào việc viết các đoạn code.
Qua đây, chúng em xin gửi lời cảm ơn sâu sắc đến TS Cao Tuấn Dũng đã

hướng dẫn, tạo điều kiện tốt để chúng em hoàn thành tiểu luận của mình.
Hà Nội, ngày 2 tháng 4 năm 2013
Nhóm trưởng
Vũ Văn Soái
Trang 3
CHƯƠNG 1. TỔNG QUAN VỀ YII
1.1. Yii là gì?
Yii là một PHP framework được xây dựng để phát triển các ứng dụng web
quy mô lớn dựa trên nền tảng component (thành phần sử dụng lại). Yii cho phép
tái sử dụng tối đa các thành phần của hệ thống (ứng dụng) để tăng tốc độ viết
ứng dụng. Tên Yii (phát âm là `/i:/`) theo tiếng Anh là easy, efficient và
extensible.
Yii được viết bằng PHP5, chủ yếu tập trung vào high-performance,
component-based cho phép dễ dàng tạo cũng như bảo trị các ứng dụng web,
giúp làm việc hiệu quả hơn.
Yii - nói chung là một framework phát triển ứng dụng Web nên có thể dùng
để viết mọi loại ứng dụng Web. Yii rất nhẹ và được trang bị giải pháp cache tối
ưu nên nó đặc biệt hữu dụng cho ứng dụng web có dung lượng dữ liệu trên
đường truyền lớn như web portal, forum, CMS, e-commerce
1.2. Đặc tính
Easy: Để phát triển ứng dụng trên Yii cần biết PHP và OOP, ứng dụng
được viết và bảo trì dựa trên các PHP class được thừa kế từ core Yii Framework
Efficient: Ứng dụng Yii được viết theo mô hình MVC (Model-View-
Controller) điều này giúp tăng khả năng tái sử dụng code, dễ dàng bảo trì cũng
như nâng cấp sau này mà không ảnh hưởng nhiều đến hệ thống hiện tại. Việc
tách biệt giữa business logic và presentation tăng khả năng tùy biến cho các site
khác nhau.
Extensible: Hệ thống hỗ trợ sẵn ajax, web service, ADO, Active Record,
cache, i18n, RBAC, theme… Ngoài các thư viện được cung cấp kèm theo, có
thể dễ dàng phát triển các extension theo nhu cầu hoặc sử dụng các thư viện

khác như Zend chẳng hạn.
Trang 4
Security: Tăng cường khả năng bảo mật, tránh các kiểu tấn công như SQL
injection, cross-site scripting (XSS), cross-site request forgery (CSRF), and
cookie tampering
Yii tốt hơn các framework khác bởi tính hiệu quả, nhiều tính năng và có tài
liệu hướng dẫn đầy đủ (tài liệu từ nhà phát hành). Yii được thiết kế cẩn thận từ
ban đầu để đáp ứng nhu cầu phát triển ứng dụng Web nghiêm ngặt. Yii không
phải là sự trộn lẫn của các dự án đã qua hay tập hợp các 3rd party library.
Nó là kết quả của kinh nghiệm phát triển ứng dụng Web lâu năm của các
tác giả và sự phân tích kỹ lưỡng, tận dụng những điểm mạnh của các framework
khác.
Yii là một Framework dễ phát triển
Để chạy một ứng dụng web Yii, tất cả những gì cần là download Yii
Framework phiên bản mới nhất và một máy chủ hỗ trợ PHP 5.1.0 hoặc cao hơn.
Để phát triển với Yii, chỉ cần biết PHP và lập trình hướng đối tượng (OOP).
Không cần phải học bất kỳ hệ điều hành hoặc ngôn ngữ lập trình mới nào. Xây
dựng một ứng dụng Yii chủ yếu liên quan đến việc viết và duy trì các lớp PHP
của theo yêu cầu dự án, một số trong đó sẽ mở rộng từ các lớp thành phần chính
của Yii Framework.
Yii kết hợp rất nhiều các ý tưởng tuyệt vời và tích lũy từ các Framework và
ứng dụng web nổi tiếng khác. Vì vậy, nếu đang tìm hiểu Yii sau khi đã sử dụng
các Framework phát triển khác, đây là điều kiện để có thể đánh giá Framework
nào ưu điểm hơn và định hướng cho dự án phù hợp.
Yii cũng bao gồm một quy ước cấu hình, góp phần để dễ sử dụng. Điều này
có nghĩa rằng Yii đã quy ước cho hầu như tất cả các hệ thống ứng dụng. Nếu
thực hiện theo các quy ước, sẽ code ít hơn và tốn ít thời gian phát triển ứng dụng
của hơn. Nếu muốn, Yii cho phép tùy biến và linh hoạt mà không phải theo quy
ước của Yii.
Trang 5

Yii có hiệu xuất cao
Yii đã được thiết kế cẩn thận để cho phép gần như tất cả đoạn code được
phát triển và chỉnh sửa để đáp ứng bất kỳ yêu cầu nào. Nếu muốn phát triển
code mở rộng hơn thành các công cụ hữu ích cho các nhà phát triển khác sử
dụng, Yii cung cấp theo các bước và hướng dẫn để giúp bạn dễ dàng phát triển.
Điều này cho phép đóng góp vào danh sách ngày càng tăng các tính năng của
Yii và tích cực tham gia trong việc mở rộng. Điều gì đáng chú ý về Yii ? là dễ
sử dụng, hiệu suất cao, và chiều sâu mở rộng không tốn kém. Yii được đóng gói
với các tính năng giúp bạn đáp ứng những nhu cầu cao trên ứng dụng web hiện
nay. AJAX cho phép web tích hợp các widgets, thực thi của một kiến trúc MVC,
DAO và quan hệ lớp ActiveRecord, kiểm soát truy cập, xem video chuyên
nghiệp, quốc tế (I18N),và nội địa hoá (l10n), đây là các tính năng vượt trội của
Yii. Với phiên bản 1.1, Framework chính bây giờ là được đóng gói với một thư
viện mở rộng chính thức được gọi là Zii. Những mở rộng được phát triển và duy
trì bởi các thành viên chủ chốt tiếp tục mở rộng tính năng của Yii.
1.3. Ưu Điểm
Yii tốt hơn các Framework khác bởi tính hiệu quả, nhiều tính năng. Yii
được thiết kế cẩn thận từ ban đầu để đáp ứng nhu cầu phát triển ứng dụng Web
nghiêm ngặt. Yii là kết quả của sự kết hợp những gì tốt nhất của các Framework
đi trước. Nó là kết quả của kinh nghiệm phát triển ứng dụng Web lâu năm của
các tác giả và sự phân tích kỹ lưỡng, tận dụng những điểm mạnh của các
Framework khác.
Trước đó, Qiang đã từng phát triển PRADO nhiều năm. Những năm kinh
nghiệm và đánh giá của người sử dụng, cần một Framework PHP dễ dàng hơn,
mở rộng hơn và hiệu quả hơn để đáp ứng nhu cầu ngày càng tăng của các nhà
phát triển ứng dụng web. Số liệu cực kỳ ấn tượng khi so sánh với các
Trang 6
Framework PHP khác dựa trên hiệu suất của nó ngay lập tức đã thu hút sự chú
ý rất tích cực.
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 ZendFramework khá là chậm, vì kiến trúc của nó quá
đồ sộ và phức tạp.
Hiện tại có rất nhiều người ưa thích sử dụng Wordpress hay Joomla nhưng
chỉ phù hợp xây dựng các website nhỏ, cần làm nhanh, vì có sẳn nhiều thứ, cộng
đồng và tài liệu nhiều Khi nâng cấp và bảo trì rất khó khăn, tốn nhiều thời
gian.
Hiệu suất xử lý của Framework Yii hiệu quả cao. Biểu đồ dưới đây cho
thấy hiệu quả 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. Số càng cao thì tính hiệu quả càng lớn của Framework. Sự thuận lợi này
của Yii rất cần thiết cho người sử dụng khi tương tác với ứng dụng.
Trang 7
1.4. Cài đặt Yii
Yêu cầu
Sau khi cài đặt Yii, kiểm tra máy chủ có đáp ứng các yêu cầu. Có thể làm
như vậy bằng cách truy cập kiểm tra kịch bản yêu cầu tại followingURL trong
một trình duyệt web:
http://hostname/path/to/yii/requirements/index.php
Yêu cầu tối thiểu của Yii là máy chủ web hỗ trợ PHP 5.1.0 hoặc cao hơn.
Yii đã được thử nghiệm với máy chủ Apache HTTP trên hệ điều hành Windows
và Linux. Yii cũng có thể chạy trên các máy chủ web khác và các nền tảng cung
cấp PHP 5 được hỗ trợ.
Cài đặt:
Cài đặt Yii qua 2 bước sau:
• Tải về Yii Framework từ yiiframework.com.
Trang 8
• Giải nén Yii vào một thư mục Web có thể truy cập.

CHƯƠNG 2. CÁC TÍNH NĂNG CỦA YII FRAMEWORK
2.1. Mô hình thiết kế Model-View-Controller (MVC)
Yii framework sử dụng kiến trúc đã được kiểm chứng MVC, hỗ trợ việc
phân tách các phần liên quan với nhau.
MCV (Model View Controller) là tên một phương pháp chia nhỏ một ứng
dụng thành ba thành phần để cài đặt, mỗi thành phần đóng một vai trò khác nhau
và ảnh hưởng lẫn nhau, đó là models, views, và controllers.
Trang 9
Hình 2.1. Mô hình MVC
Models (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng
biểu diễn cho phần dữ liệu của chương trình, ví dụ như các dữ liệu được lưu
trong database, dữ liệu từ một hệ thống các ứng dụng khác như legacy system,
file system, mail system …
Thông thường trong kiến trúc MVC, Model là phần rất quan trọng trong cả
dự án, nó có quan hệ mật thiết với cơ sở dữ liệu.
Yii có 2 loại model: form model là lớp (CFormModel) và active record
model là lớp (CActiveRecord). Cả hai được mở rộng từ lớp (CModel).
CFormModel đại diện cho mô hình dữ liệu do người dùng nhập vào ở dạng
HTML. Sau đó lưu dữ liệu này vào bộ nhớ và thông qua CActiveRecord dữ liệu
được lưu vào CSDL.
Trang
10
ActiveRecord (AR) là một mô hình được sử dụng để truy cập cơ sở dữ liệu
theo hướng đối tượng. Mỗi đối tượng AR trong Yii là một thể hiện của
CActiveRecord là kết quả của 1 dòng dữ liệu của bảng được tạo trong CSDL.
Views (Tầng giao diện): là phần giao diện với người dùng, bao gồm việc
hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa
…, để người dùng có thể thêm, xóa, sửa, tìm kiếm và làm các thao tác khác đối
với dữ liệu trong hệ thống Thông thường, các thông tin cần hiển thị được lấy từ
thành phần Models.

Nó có thể chứa câu lệnh PHP nhưng nó được khuyến cáo không nên thay
đổi mô hình dữ liệu nên vẫn còn tương đối đơn giản.
Các câu lệnh PHP trong View thường có các điều kiện và vòng lặp rất đơn
giản, và được hỗ trợ bởi các phương thức HTML và Widget là lớp có thể tái sử
dụng nhiều lần.
Controllers (Tầng điều khiển)
Controller là một thể hiện của CController. Nó được tạo ra bởi các ứng
dụng khi người dùng yêu cầu. Controller là thiết bị điều khiển chính cho các yêu
cầu từ người sử dụng, và nó sẽ tương tác với cơ sở dữ liệu. Một lớp trong
Controller có tên bắt đầu là “action”. Khi tạo mới một ứng dụng Yii thì mặc
định trong Controller là có lớp actionIndex, actionContact.
Code dưới đây nó định nghĩa 1 SiteController gồm 1 index action và 1
contact action:
class SiteController extends CController
{
public function actionIndex()
{
//
Trang
11
}

public function actionContact()
{
//
}
}
Controller chịu trách nhiệm xử lý các tác động về mặt giao diện, các thao
tác đối với models, và cuối cùng là chọn một view thích hợp để hiển thị ra màn
hình.

Trong kiến trúc MVC, view chỉ có tác dụng hiển thị giao diện, còn điều
khiển dòng nhập xuất của người dùng vẫn do Controllers đảm trách. Trong phân
tích/ thiết kế hướng đối tượng (OOA/OOD), khi nói đến MVC, người ta thường
dùng các thuật ngữ MVC Design Pattern, MVC Framework, MVC Paradigm.
Có người lại nói, về thiết kế chương trình, vẽ diagram về cấu trúc của chương
trình, MVC là một phương pháp thiết kế (Design Pattern). Khi có một bộ công
cụ tiện ích lập trình hỗ trợ cho lập trình viên viết chương trình theo phương pháp
MVC (ví dụ như Jakarta Struts ), thì bộ công cụ tiện ích lập trình đó gọi là MVC
Framework implementation. Còn từ Paradigm dùng cho MVC mang tính chất
chỉ chung chung. Hiện nay, tại Mỹ, các thuật ngữ trên thường được dùng lẫn,
tùy theo tác giả và hoàn cảnh.
Sau đây là quy trình hoạt động:
Lược đồ sau đây mô tả một workflow tiêu biểu của 1 ứng dụng Yii khi
đang xử lý request từ user.
Trang
12
Hình 2.2. Quy trình hoạt động
Trang
13
1. user gửi một request với một
2. url Web
Server sẽ xử lý request đó bằng cách thực thi script bootstrap
(index.php).
3. Script bootstrap sẽ tạo một thể hiện (instance) của Application và
chạy nó.
4. Application lấy thông tin trong request từ một component ứng dụng
có tên là request.
5. Ứng dụng sẽ xác định controller và action phù hợp với sự giúp đỡ của
một component ứng dụng có tên là urlManager. VD: Từ url trên, ta
thấy controller cần gọi là post và trong controller này action ta cần gọi

là show, ứng dụng sẽ tìm đến function actionShow() có trong class
PostController.
6. Ứng dụng sẽ tạo một thể hiện của controller cần gọi để tiếp tục xử lý
request từ user. Controller sẽ xác định được request sẽ chuyển đến
một phương thức có tên là actionShow(), nó tạo và thực thi các filter
(vi dụ như access control, benchmarking) kết hợp với action được gọi.
Action được thực thi nếu đúng với filter.
7. Action sẽ đọc model Post với ID là 1 từ cơ sở dữ liệu.
8. Action sẽ render ra một view có tên là show với model Post.
9. View đọc và hiển thị các thuộc tính của model Post.
10.View thực thi các widget .
11.View sẽ render kết quả được nhúng trong layout.
12.Action hoàn tất việc render và hiển thị kết quả cho người dùng.
Trong tiểu luận này, nhóm chúng em xin đưa ra 2 mô hình MVC tham
khảo:
MVC 1: Trong MVC model 1, các trang JSP đóng vai trò Hiển thị (View)
và Điều khiển (Controller). Có thể có nhiều trang JSP khác nhau đóng các vai
trò khác nhau.
Trang
14
Hình 2.3. Sơ đồ MVC 1
Khi người sử dụng dùng các nút bấm, menu hoặc link … trên trình duyệt
Web (Web browser) để thực hiện một thao tác, một lệnh (có thể kèm theo các
tham số) được gửi tới một trang JSP tương ứng. Trang JSP này sẽ khởi tạo một
hoặc nhiều Java Bean (nếu cần thiết), truyền các lệnh cần thi hành tới Java Bean.
Chú ý rằng đây là các Java Bean thông thường, chứ không phải Enterprise Java
Bean (EJB) Sau khi Java Bean thực hiện xong việc truy xuất hoặc cập nhật dữ
liệu, trang JSP ban đầu có thể hiển thị dữ liệu lấy từ Bean (JSP ban đầu đóng
luôn vai trò View), hoặc chọn một trang JSP khác để hiện dữ liệu từ Bean (JSP
ban đầu đóng luôn vai trò Controller). Trong một thiết kế tốt, để bảo đảm việc

tách rời phần trình bày và logic của chương trình, trang JSP nhận request chỉ
đóng vai trò Điều khiển (Controller). MVC model 1 có một nhược điểm là phần
logic điều khiển được viết trong trang JSP, như vậy phần chương trình Java
phức tạp dùng để điều khiển sẽ bị lẫn vào trong mã HTML dùng để trình bày.
Độ phức tạp của chương trình càng cao, thì trang JSP càng khó bảo trì. Hơn nữa
trong các dự án phần mềm phức tạp, thì phẩn hiển thị của trang JSP thường
được làm bởi người thiết kế Web, giỏi về HTML và đồ họa, còn phần chương
trình Java được viết bởi lập trình viên chuyên về lập trình. Trong các dự án phức
tạp, dùng JSP làm phần điều khiển sẽ làm lẫn lộn việc phân chia ranh giới trách
nhiệm giữa nhóm thiết kế đồ họa và nhóm lập trình, đôi khi dẫn đến việc bảo trì
và phát triển trở nên rất khó khăn, gần như không thể làm được.
Trang
15
MVC 2: Trong MVC model 2, một hoặc nhiều servlet (thường là một)
đóng vai trò điều khiển, các Java Bean đóng vai trò Mô hình và các trang JSP
đóng vai trò hiển thị.
Trong model 2, các logic phức tạp của chương trình được viết hoàn toàn
trong các servlet, là các chương trình Java. Phần hiển thị chỉ gồm các trang JSP
với một vài mã đơn giản để lấy dữ liệu có sẵn, không có logic phức tạp, vì thế
hoàn toàn có thể được tạo ra bằng những người thiết kế Web. Các yêu cầu của
người dùng được gửi từ trình duyệt Web tới servlet. Servlet sẽ khởi tạo Java
Bean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin. Khi Java Bean hoàn
thành công việc, servlet sẽ chọn trang JSP thích hợp để hiện thông tin trong Java
Bean cho người dùng. Đây chính là một cách sử dụng MVC rất hiệu quả trong
Java.
Tất nhiên là sử dụng MVC model 2 một cách hoàn toàn cứng nhắc, phần
Điều khiển chỉ dùng servlet, phần Hiển thị chỉ dùng JSP sẽ dẫn đến một vài
trường hợp kém hiệu quả, nhất là khi có các request từ trình duyệt Web chỉ đòi
hỏi việc hiển thị thông tin.
Ví dụ: Một trang Web đang hiện các mail trong mail box từ mail thứ 20

đến mail thứ 40. Danh sách các mail này đã có sẵn phần mô hình khi người dùng
login và phần điều khiển ra lệnh cho phần; mô hình lấy danh sách các mail có
trong mail box trong POP server. Từ trang Web này, người dùng phát ra một
yêu cầu “Next” để xem tiếp danh sách các mail từ mail thứ 40 đến mail thứ 60.
Đây đơn thuần chỉ là đòi hỏi thông tin hiển thị, do đó, nếu gửi qua servlet
điều khiển , servlet sẽ không làm gì cả, mà chỉ gửi yêu cầu hiển thị tới trang JSP
hiển thị danh sách mail. Trong trường hợp này, gửi thẳng yêu cầu hiển thị từ
trình duyệt Web tới trang JSP sẽ hiệu quả hơn.
Trang
16
Hình 2.4. Sơ đồ MVC 2
Ưu điểm MVC:
- Phát triển phần mềm: Có tính chuyên nghiệp hóa, có thể chia cho nhiều
nhóm được đào tạo nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật cho đến lập
trình đến tổ chức database.
- Bảo trì: Với các lớp được phân chia theo như đã nói, thì các thành phần
của một hệ thống dễ được thay đổi, nhưng sự thay đổi có thể được cô lập trong
từng lớp, hoặc chỉ ảnh hưởng đến lớp ngay gần kề của nó, chứ không phát tán
náo loạn trong cả chương trình.
- Mở rộng: Với các lớp được chia theo ba lớp như đã nói, việc thêm chức
năng vào cho từng lớp sẽ dễ dàng hơn là phân chia theo cách khác. Tiện về bug
lỗi, kiểm soát code, workflow dễ dàng hơn và nhiều người có thể tham gia phát
triển cùng trên 1 module.
Nhược điểm MVC:
- Đối với dự án nhỏ: Cồng kềnh, tốn thời gian phát triển.
- Trade-off là performance, do tốn thời gian trung chuyển DTO (Data
Transfer Object) giữa các layers
Trang
17
2.2. Database Access Objects (DAO), Query Builder, Active Record, DB

Migration
Yii framework cho phép người sử dụng mô hình hóa dữ liệu trong
Database dưới dạng các object và tránh cho người dùng sự nhàm chán hoặc là
phức tạp khi phải viết những câu lệnh SQL trùng lặp.
2.3. Form nhập và kiểm tra (validate)
Yii tạo các form thu thập dữ liệu trở nên vô cùng dễ dàng và an toàn. Với
những hàm kiểm tra được đặt sẵn, như số, các phương thức hỗ trợ và widgets
làm đơn giản hóa các công việc kiểm tra form nhập dữ liệu.
Để thực hiện được việc này, hệ thống sử dụng bộ lọc filter. Filter là một
đoạn mã đã được cấu hình sẽ được thực hiện trước hoặc sau khi một bộ điều
khiển hành động thực thi. Ví dụ, một bộ lọc kiểm soát truy cập có thể được thực
hiện để đảm bảo rằng người dùng được xác thực trước khi thực hiện các hành
động được yêu cầu, một bộ lọc hiệu suất có thể được sử dụng để đo thời gian
trong việc thực hiện hành động.
publicfunctionfilterAccessControl($filterChain) {
// call $filterChain->run() to continue filter and action execution
}
$filterChain là một thể hiện của CFilterChain đại diện cho các danh sách
bộ lọc kết hợp với các hành động được yêu cầu. Bên trong một phương pháp
lọc, chúng ta có thể gọi filterChain-> run () để tiếp tục lọc và thực hiện hành
động.
Một bộ lọc cũng có thể là một thể hiện của CFilter hoặc lớp con của nó.
Các mã sau đây định nghĩa một lớp bộ lọc mới:
Trang
18
class PerformanceFilter extends Cfilter {
protectedfunctionpreFilter($filterChain) {
// biểu thức logic được áp dụng trước khi hành động được thực
thi
Return true;

}
protectedfunctionpostFilter($filterChain) {
// biểu thức logic được áp dụng sau khi hành động được thực
thi
}
}
Để áp dụng các bộ lọc cho hành động, cần phải ghi đè lên CController::
filters(). Các phương thức nên trả lại một mảng các cấu hình bộ lọc.
Ví dụ
classPostControllerextendsCController {

publicfunctionfilters() {
return array(
'postOnly + edit, create',
array(
'application.filters.PerformanceFilter - edit,
create',
'unit'=>'second',
),
);
Trang
19
}
}
Đoạn mã trên chỉ định hai bộ lọc: postOnly và PerformanceFilter. Bộ lọc
PostOnly là dựa trên phương thức (tương ứng với bộ lọc được định nghĩa sẵn
sàng ở CController), trong khi đó các bộ lọc PerformanceFilter là đối tượng cơ
bản. Đường dẫn bí danh application.filters. PerformanceFilter xác định các bộ
lọc tập tin lớp protected/filters/PerformanceFilter.
Sử dụng một mảng để cấu hình PerformanceFilter để nó được sử dụng khởi

tạo các giá trị thuộc tính của các đối tượng bộ lọc. Ở đây thuộc tính đơn vị của
PerformanceFilter sẽ được khởi tạo như là ''second''. Sử dụng các dấu cộng và
các dấu trừ từ các toán tử , chúng ta có thể chỉ định mà hành động bộ lọc nên và
không nên được áp dụng. Ở phía trên, postOnly nên được áp dụng để chỉnh sửa
và tạo ra hành động, trong khi đó PerformanceFilter nên được áp dụng cho tất cả
các hành động EXCEPT chỉnh sửa và tạo ra các hành động. Nếu không cộng
cũng không trừ xuất hiện trong cấu hình bộ lọc, bộ lọc sẽ được áp dụng cho tất
cả các hành động.
2.4. Các widget hỗ trợ Ajax(AJAX-enabled widgets)
Được tích hợp với Jquery, Yii đem tới một loạt các Ajax widget, ví dụ như
các trường tự động hoàn tất nhập liệu, xem dưới dạng cây, lưới dữ liệu, tất cả
cho phép viết những giao diện người dùng vô cùng đơn giản nhưng có tính tiện
lợi cao.
Widget là một trường hợp của Cwidget hoặc là một lớp con của nó. Nó là
một thành phần chủ yếu cho mục đích trình bày. Widget thường xuyên được
nhúng trong view để tạo ra một số giao diện người dùng phức tạp hơn. Ví dụ,
một lịch biểu Widget có thể được dùng để hoàn trả một lịch biểu giao diện
Trang
20
người dùng. Những Widget có khả năng tái sử dụng giao diện người sử dung tốt
hơn. Để sử dụng một Widget ta viết câu lệnh như sau:
<?php$this->beginWidget('path.to.WidgetClass'); ?>
Nội dung chính có thể được giữ lại bởi widge
<?php$this->endWidget(); ?>
Hoặc
<?php$this->widget('path.to.WidgetClass'); ?>
Những Widget có thể được cấu hình để tuỳ chỉnh các hành vi của nó. Điều
này đúng bởi các thiết lập giá trị thuộc tính cơ sở khi gọi hàm
CbaseController::beginWidget, sẽ muốn xác định chính mặt nạ được sử dụng.
Có thể làm như vậy bởi cách thiết lập một mảng những giá trị thuộc tính cơ sở

như sau, nơi mà các mảng từ khoá có tên thuộc tính và mảng giá trị các giá trị
thuộc tính cơ sở tương ứng thuộc tính Widget:
<?php
$this->widget('CMaskedTextField',array(
'mask'=>'99/99/9999'
));
Trang
21
?>
Để định nghĩa một Widget mới, mở rộng Cwidget và viết đè lên nó bằng
phương thức init() và run() :
classMyWidgetextendsCWidget {
publicfunctioninit() {
// this method is called by CController::beginWidget()
}
publicfunctionrun() {
// this method is called by CController::endWidget()
}
}
Giống như một bộ điều khiển, một Widget có thể cũng có những view
riêng. Mặc đinh, tệp tin hiển thị Widget được đặt dưới thư mục con của thư mục
chứa các tệp tin lớp Widget. Các hiển thị này có thể được hoàn trả bởi việc gọi
hàm Cwidget::render(), tương tự như một bộ điều khiển. Sư khác biệt duy nhất
là không có giao diện được áp dụng tới một view Widget.
2. 5. Xác thực và phân quyền
Yii đã tích hợp sẵn một lớp hỗ trợ Xác thực. Nó đồng thời cũng hỗ trợ cho
việc phân quyền theo vai trò - role-based access control (RBAC).
2. 6. Giao diện
Yii đã tích hợp 1 giao diện website giúp người phát triển dễ dàng thay đổi
khi xây dựng 1 website mạnh mẽ.

Trang
22
Giao diện là một màn hình hiển thị đặc biệt và thường được sử dụng để
trang trí view. Nó thường chứa các phần của giao diện người dùng. Ví dụ, một
giao diện có thể chứa phần tiêu đề và cuối trang và nhúng những nội dung hiển
thị ở giữa.
tiêu đề ở đây
// $content là nơi lưu trữ kết quả của nội dung hiển thị.
<? php echo $ content ; >
phần cuối trang
Giao diện là mặc nhiên được áp dụng khi gọi hàm render(). Theo mặc định,
hiển thị tập lênh trên giao diện như sau Protected/views / layouts/ main.php.
Điều này có thể được tuỳ chỉnh bởi sự thay đổi hoặc CwebApplication::layout
hoặc Ccontroller::layout. Để hàm hoàn trả lại 1 màn hình hiển thị không áp dụng
giao diện bạn gọi hàm RenderPartial().
2. 7. Web services
Yii hỗ trợ hệ thống tự động cho dịch vụ kỹ thuật phức tạp chuyên biệt
WSDL và quản lý việc xử lý yêu cầu của web services.
2. 8. Đa ngôn ngữ (I18N) và địa phương hóa (L10N)
Yii hỗ trợ dịch các đoạn tin, định dạng ngày, thời gian và địa phương hóa
giao diện. (Yii supports message translation, date and time d, number
formatting, and interface localization.)
Trang
23
2.9. Lớp hỗ trợ cache
Yii hỗ trợ cahe dữ liệu, cahe trang, cache mảng và dữ liệu động. Những
phương tiện hỗ trợ bộ đệm (cache) có thể được thay đổi dễ dàng mà không cần
phải động tới code của ứng dụng.
2.10. Xử lý lỗi và Log
Xử lý lỗi và thể hiện lỗi ngày càng tốt hơn, các tin log có thể được sắp xếp,

lọc và điều hướng theo nhiều điểm đến khác nhau.
Một ứng dụng Yii có thể chạy trong chế độ gỡ lỗi hoặc phát triển, được
xác định bằng hằng số YII DEBUG. Theo mặc định, hằng số này không đổi
được xác định là false, có nghĩa là phương thức phát triển. Để chạy trong chế độ
gỡ lỗi, YII DEBUG có giá trị true. Chạy các ứng dụng ở chế độ gỡ lỗi thường
chậm hơn bởi vì nó giữ nhiều bản ghi nội bộ. Mặt khác, chế độ gỡ lỗi hữu ích
hơn trong giai đoạn phát triển, vì nó cung cấp thông tin gỡ lỗi phong phú hơn
khi một lỗi xảy ra.
2.11. Bảo mật
Yii được kết hợp với rất nhiều các biện pháp nhằm ngăn chặn ứng dụng
web của bạn bởi tấn công SQL injection, cross-site scripting (XSS), cross-site
request forgery (CSRF) và giả mạo cookie.
2.12. Kiểm thử
Yii cung cấp những hỗ trợ dành cho viết và chạy thử unit test cũng như là
function test, dựa trên PHPUnit và Selenium.
Trang
24
2.13. Tự động tạo code (Automatic code generation)
Yii cung cấp 1 số công cụ sẵn trực quan, có khả năng tự động tạo code với
khả năng ở rộng cao, giúp bạn nhanh chóng tạo code cho những tính năng như
input, CRUD (create, read, update, delete).
2.14. Tuân thủ theo XHTML
HTML code được tạo bởi các thành phần của Yii và bộ tạo code được tuân
thủ theo đúng chuẩn XHTML.
2.15. Thuần hướng đối tượng
Yii framework tuân thủ theo đúng mô hình khắt khe cuả OOP. Và nó
không hề define bất kì 1 global biến hay hàm nào. Và các hệ thống class phân
cấp cho phép sử dụng lại và tùy biến tới tối đa.
2.16. Dễ dàng sử dụng với code của bên cung cấp thứ 3
Yii được thiết kế cẩn thận để có thể làm việc tốt với code của bên thứ 3. Ví

dụ có thể dùng code từ PEAR hoặc Zend Framework trong ứng dụng của Yii.
2.17. Tài liệu chi tiết
Mọi phương thức đơn lẻ hoặc thuộc tính đều được viết rõ ràng trong tài
liệu. Sách và hướng dẫn đầy đủ cũng có sẵn, cung cấp 1 hệ thống học Yii.
2.18. Hệ thống thư viện mở rộng
Yii cung cấp 1 hệ thống thư viện mở rộng bao gồm những thành phần do
người dùng đóng góp. Điều này giúp cho danh sách các tính năng không bao giờ
dừng lại.
Có thể thử dùng Yii bởi tốc độ, bảo mật,các tính năng đa dạng phong phú
và kỹ thuật tuyệt vời của nó. Nhưng sẽ sử dụng Yii lâu dài vì nó vô cùng trực
quan, linh hoạt và dễ sử dụng.
Trang
25

×