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

nghiên cứu về mô hình lập trình mvc

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 (314.47 KB, 30 trang )

Trường đại học Bách Khoa Hà Nội.
MÔ HÌNH LẬP TRÌNH MVC
Mở đầu 2
I.Nội dung 4
1.Mục đích 4
2.Định nghĩa 4
3.Tổng quan về mô hình lập trình MVC 4
4.Ưu nhược điểm 6
5.Triển khai MVC trên các ngôn ngữ khác nhau 7
5.1ASP.NET 7
5.2Java 8
5.3PHP 11
6.So sánh các ngôn ngữ 13
7.Ví dụ minh họa: Framework Yii 14
a.Tổng quan 14
b.Entry script 16
c.Application 17
d.Controller 20
e.Model 26
f.View 27
II.Tài liệu tham khảo 30
1.Đường link 30
2.Tên tài liệu 30
Trường đại học Bách Khoa Hà Nội.
Mở đầu
Trong quãng thời gian 10 trở lại đây. Tốc độ phát triển của công nghệ thông tin ở
Việt Nam ngày càng trở lên mạnh mẽ. Cùng với sự phổ cập của máy tính, internet
việc ứng dụng công nghệ thông tin và các lĩnh vực trong cuộc sống cũng trở lên
phổ biến, quen thuộc hơn. Đặc biệt là các lĩnh vực tương tác, quản lý, quảng cáo
… qua môi trường web. Đề đáp ứng được một lượng nhu cầu lớn như vậy, một
lượng lớn các phần mềm, trang web đã được tạo ra với các chức năng khác nhau.


Kéo theo đó là tình trạng một lập trình viên phải tham gia phát triển cùng một lúc
nhiều dự án, duy trì sự họat động của nhiều phần mềm, trang web (Có thể của
mình hoặc kế thừa sản phẩm của người tiền nhiệm). Cũng như việc một nhóm
gồm nhiều người hợp tác để hình thành một sản phẩm.
Tất cả các đặc điểm trên yêu cầu cần có một phương thức phát triển phần mềm
nhanh, dễ dàng duy trì hoạt động, xử lý lỗi đơn giản. Phương thức phát triển phần
mềm này phải tạo điều kiện cho việc nắm bắt code phần mềm.(Dành cho người
cần phải phát triển phần mềm của một người đi trước đó hay một người lâu ngày
mới làm việc lại với code cũ mình đã tạo). Phương thức này cũng phải tạo điều
kiện cho việc phối hợp làm việc nhóm. Sự thay đổi của phần mềm do mỗi cá nhân
thực hiện phải ảnh hưởng ít, thậm chí không làm ảnh hưởng đến các thành phần
khác trong dự án.
Với các ý tưởng trên, mô hình MVC hiện nay đang ngày càng trở lên phổ biến hơn
trong các quy trình phát triển phần mềm ở nước ta. Nhằm tăng thêm kiến thức về
lập trình web, cũng như tiếp cận với môi trường làm việc thực tế sau này, nhóm
chúng em xin phép được nghiên cứu về mô hình lập trình MVC. Cụ thể hơn,
chúng em xin phép đi sâu vào cách triển khai mô hình MVC trong ngôn ngữ PHP
với framework Yii.
Trong báo cáo này chúng em sẽ đi vào tìm hiểu.
• Tổng quan về mô hình lập trình MVC
Trường đại học Bách Khoa Hà Nội.
• Ưu nhược điểm của việc lập trình theo mô hình MVC.
• Các phương thức triển khai MVC trên các ngôn ngữ khác nhau
• So sánh các ngôn ngữ
• Tìm hiểu cụ thể việc triển khai mô hình MVC thông qua framework Yii
Do thời gian nghiên cứu hạn hẹp, kiến thức về lập trình web vẫn ở mức sơ khai
nên nghiên cứu sẽ còn nhiều thiếu sót. Rất mong thầy giáo và mọi người châm
trước, góp ý để khắc phục các thiếu sót còn lại.
Cảm ơn thầy giáo, mọi người đã đọc!
Trường đại học Bách Khoa Hà Nội.

I. Nội dung
1. Mục đích.
Xây dựng một cái nhìn tổng quan về mô hình lập trình MVC.
Tìm hiểu các phương thức triển khai mô hình MVC trên các ngôn ngữ lập trình khác
nhau.
Tìm hiểu cụ thể sự hoạt động, cách triển khai MVC trong PHP với framework Yii
2. Định nghĩa.
+ Wikipedia: MVC hay Model-View-Controller (tiếng Anh) là một kiến trúc
phần mềm trong kỹ thuật lập trình phần mềm. Khi sử đúng cách,
mẫu MVC giúp cho người phát triển phần mềm cô lập các nguyên tắc
nghiệp vụ và giao diện người dùng một cách rõ ràng hơn. Phần mềm phát
triển theo mẫu MVC tạo nhiều thuận lợi cho việc bảo trì vì các nguyên tắc
nghề nghiệp và giao diện ít liên quan với nhau. Trong mô hình MVC,
model tượng trưng cho dữ liệu của chương trình phần mềm, view bao gồm
các thành phần giao diện người dùng, controller quản lý sự trao đổi giữa dữ
liệu và các qui trình nghiệp vụ.
3. Tổng quan về mô hình lập trình MVC
MVC được khai sinh với framework được phát triển bởi Tryve Reenskaug cho nền
tảng Smalltalk vào cuối những năm 70. Từ đó trở đi nó đóng vai trò là một qui tắc
quan trọng trong hầu hết các framework giao diện người dùng và trong các ý
tưởng thiết kế giao diện người dùng. Một số thông tin cơ bản về MVC:
+ Tương tác giữa các thành phần.
Ngoài việc chia ứng dụng thành ba thành phần, thiết kế MVC xác định các
tương tác giữa chúng.
- Một Controller có thể gửi các lệnh đến các view liên kết đến nó để thay đổi
cách hiển thị của view. Nó có thể gửi các lệnh đến model để cập nhật trạng
thái của model.
Trường đại học Bách Khoa Hà Nội.
- Một model thông báo cho các view và các controller liên quan với nó khi
có sự thay đổi trạng thái. Việc thông báo cho phép các view xử lý các

output đã thay đổi, và các controller thay đổi các lệnh có thể thực thi. Một
sự thực thi MVC thụ động bỏ qua các thông báo này, bởi vì ứng dụng
không yêu cầu chúng hoặc nền tảng phần mềm không hỗ trợ.
- Một view thu thập thông tin từ model để tạo ra một giao diện đầu ra.
+ Cách sử dụng MVC trong các ứng dụng web.
MVC được xem như nhắm tới để trở thành một kiến trúc cho các ứng dụng
World Wide Web. Một vài framework ứng dụng thương mại và phi thương
mại đã được tạo ra với việc sử dụng MVC là bắt buộc. Theo cách tiếp cận này,
các client gửi các request hyperlink hoặc form input đến controller và sau đó
nhận về một trang web đầy đủ và cập nhật (Hoặc một tài liệu khác) từ view;
thành phần model tồn tại hoàn toàn trên server. Khi các công nghệ client đã
phát triển, các frame workd như JavaScriptMVC và Backbone đã được tạo ra
cho phép các thành phần MVC được thực thi một phần trên client.
+ MVC làm việc như thế nào.
- Nhìn lại sơ đồ phía trên, ta thấy có mũi tên nét liền và những mũi tên nét
đứt. Những mũi tên nét đứt được hình thành trên quan điểm của người
dùng mà không phải là của những nhà thiết kế phần mềm thực sự. Do
đó chúng ta chỉ quan tâm đến những mũi tên còn lại.
Đây là một cách đơn giản để mô tả lại luồng sự kiện được xử lý trong
MVC:
• User tương tác với View, bằng cách click vào button, user gửi yêu
cầu đi.
Trường đại học Bách Khoa Hà Nội.
• Controller nhận và điều hướng chúng đến đúng phương thức xử lý ở
Model.
• Model nhận thông tin và thực thi các yêu cầu.
• Khi Model hoàn tất việc xử lý, View sẽ nhận kết quả từ Model và
hiển thị lại cho người dùng.
4. Ưu nhược điểm.
+ Ưu điểm

- Chuyên nghiệp hóa quy trình phát triển phần mềm: Việc phân tích, thiết kế
theo mô hình MVC sẽ chia chương trình thành các phần độc lập, giúp phát
triển ứng dụng nhanh hơn. Dễ dàng triển khai phát triển song song nhiều
module.
- Việc chuyển giao, quản lý mã nguồn dễ dàng. Xây dựng lên một “bản đồ”
dễ hiểu giúp lập trình viên dễ dàng nắm bắt được mã nguồn mới tiếp cận
hoặc lâu ngày mới dung tới.
Trường đại học Bách Khoa Hà Nội.
- Chủ động tách code thành 3 phần theo hướng OOP, việc chỉnh sửa, hay đổi
một thành phần không ảnh hưởng đến các phần khác.
+ Nhược điểm
- Đối với các dự án nhỏ, việc áp dụng mô hình MVC gây cồng kềnh, tốn thời
gian trong quá trình phát triển. Tốn thời giant rung chuyển dữ liệu của các
thành phần.
5. Triển khai MVC trên các ngôn ngữ khác nhau.
Đa số các ngôn ngữ hiện này đều có các framework hỗ trợ việc thiết kế, phát triển phần mềm
theo mô hình MVC. Điển hình một số ngôn ngữ có thể kể đến như: Java, ASP .NET, PHP …
Sau đây, chúng ta sẽ tìm hiểu mô hình MVC trong một số ngôn ngữ trên.
5.1 ASP.NET
Một trong những điều mà nhiều người đã đòi hỏi hàng năm về một ASP .NET được tích hợp
hỗ trợ cho việc phát triển các ứng dụng web sử dụng kiến trúc MVC. Vào tháng 10/2007 tại
hội thảo Alt.NET ở Austin, phiên bản công cộng đầu tiên của một frameword MVC cho
ASP.NET mới được đưa ra. Cũng trong năm, một cái nhìn tổng quan về framework này được
phát hành, hỗ trợ đầu đủ các tính năng ASP.NET.
MVC là một hình thái framework trong đó chia việc triển khai ứng dụng ra thành 3 thành
phần chính.
• Models: là các tành phần của ứng dụng chịu trách nhiệm duy trì trạng thái. Bình
thường, trạng thái này tồn tại trong CSDL.
• Views: Các thành phần chịu trách nhiệm hiển thị giao diện người dùng của ứng
dụng. Cụ thể, giao diện này được tạo ra từ dữ liệu của model.

• Controllers: là các thành phần chịu trách nhiệm cho việc vận chuyển tương tác người
dùng, thao tác model và cuối cùng, lựa chọn view để hiển thị. Trong một ứng dụng
MVC, view được xem là chỉ để hiển thị thông tin.
Một trong số các lợi ích của MVC là giúp tách riêng các ngữ cảnh của model, view,
controller trong một ứng dụng. Việc duy trị một sự tách biệt rõ rang của các khái niệm giúp
việc kiểm tra ứng dụng dễ dàng hơn rất nhiều, do sự tương phản giữa các thành phần khác
nhau trong ứn gudngj được xác định rõ rang và ăn khớp với nhau hơn.
Các mẫu MVC có thể giúp kích hoạt sự phát triển điều hướng có kiểm tra(test driven
development) đỏ/xanh, ở đó bạn triển khai các bài test đơn vị tự động, xác định và xác minh
yêu cầu cho code mới, việc đầu tiên trước khi bạn viết code cho chính bạn.
Trường đại học Bách Khoa Hà Nội.
Một vài chi tiết cơ bản về framework MVC trong ASP.NET
• Nó tạo ra sự tách biệt rõ ràng giữa các khái niệm, khả năng test và TDD theo mặc
định. Tất cả các liên kết lõi trong framework MVC là giao diện cơ bản và dễ dàng giả
lập. Bạn có thể test riêng các ứng dụng mà không cần chạy Controller với một quá
trình xử lý ASP.NET với bất kì framework test đơn vị nào muốn xử dụng. (Bao gồm:
NUnit, MBUnit, MS Test …)
• Nó dễ dàng mở rộng và có khả năng nhứng. Mọi thứ trong framework MVC được
thiết kế để bạn có thể dễ dàng thay thế, tùy biến. Nó cũng hỗ trợ việc sử dụng các
injection và IOC container độc lập đang tồn tại (Windsor, Spring.NET, NHibernate
…)
• Nó chứa một thành phần chỉ dẫn URL rất mạnh, giúp bạn xây dựng ứng dụng với các
URL rõ rang. Các URL không cần thiết phải có các extension cho chúng, và được
thiết kế để dễ dàng hỗ trợ các mẫu đặt tên thông thường REST và SEO.
• Framework MVC hỗ trợ việc sử dụng các markup file hiện tịa như ASP.NET .ASPX,
ASCX và .Master như các “view template”. Tuy nhiên, nó không sử dụng các post-
back model cho việc tương tác trở lại với server. Thay đó, bạn có thể route tất cả các
tương tác người dùng đến một lớp controller, việc này đảm bảo sự tách biệt các ngữ
cảnh và khả năng test.
• Framwork MVC trong ASP.NET hỗ trợ đầy đủ các tính năng hiện của ASP.NET như:

form/ xác thực window, ủy quyền URL, thành viên/luật, đầu ra và cache dữ liệu, quản
lý trạng thái phiên/session, cấu hình hệ thống, kiến trúc …
5.2 Java.
Tương tự như mô hình MVC trong các ngôn ngữ khác, trong java, mô hình thiết kế MVC
giúp người dung tách biệt các logic nghiệp vụ khỏi giao diện người dung khiến việc thay đổi
một trong 2 thành phần không ảnh hưởng đến phần còn lại. Ban đầu MVC yêu cầu thêm một
chút thời gian thiết kế và code , nhưng rất có lợi cho việc duy trì, vận hành sau này.
Mô hình MVC được giới thiệu lần đầu tiên bởi các nhà phát triển Smalltalk ở Xerox PARC
(Trung tâm nghiên cứu Palo Alto). Ý tưởng cơ bản là chia ứng dụng ra thành 3 phần riêng
biệt, mỗi phần có thể thay thế mà không làm ảnh hưởng đến các thành phần khác.
• Model: Dữ liệu của ứng dụng, cùng với các logic nghiệp vụ xác định làm thế nào để
thay đổi và truy cập dữ liệu. Model có thể được chia sẻ cho nhiều đối tượng view và
controller.
Trường đại học Bách Khoa Hà Nội.
• View: Phương thức trình diễn dữ liệu của model ra thế giới bên ngoài. Nó có thể là
một dạng của GUI, tạo ra các đoạn hội thoại …
• Controller: Phương thức tổng hợp các input của người dung hoặc môi trường khác và
tạo ra các tác động vào model,các thay đổi bình thường trên một vài dữ liệu trong
model đó.
a. Tương tác giữa các thành phần.
Ban đầu , view cũng có thể là controller yêu cầu model cung cấp trạng thái hiện tại. View có
thể hiển thị dữ liệu điều người dung, controller có thể kiểm tra dữ liệu để quyết định việc
tương tác với người dung sẽ diễn ra như thế nào.
Hình 1
Như ở hình 1, view và controller sẽ lắng nghe sự thay đổi của model. Ngôn ngữ JAVA triển
khai các cảnh báo này sử dngj các event. Bất kì khi nào model thông báo sự thay đổi, view và
controller sẽ yêu cầu cung cấp trạng thái mới của dữ liệu, sau đó cập nhật sự trình diễn tới
người dùng.
Trường đại học Bách Khoa Hà Nội.
Hình 2

Hình 2 chỉ ra cách tương tác với người dung trong ứng dụng. Nếu người dung quyết định tương
tác, controller sẽ theo dõi input của người dùng như: click chuột, di chuyển chuột, nhấn các phím
trên bàn phím. Nó quyết định các phương thức tương tác, yêu cầu model cập nhật dữ liệu hoặc
view để thay đổi cách nó hiển thị dữ liệu.
b. Delegates - Kết nối giữa view và controller
Hình 3
Trong java, một số framework khi thiết kế đi kèm với một số delegate, một sự ghép nối giữa
view và controller, sự trao đổi giữa view và controller được tách biệt ra. Các tương tác giữa
Trường đại học Bách Khoa Hà Nội.
delegate và model được thực hiện tương tự như giữa view và controller với model. Tuy nhiên
tương tác sẽ trở nên đơn giản hơn do lập trình việc không phải quản lý việc quản lý tương tác
giữa view và controller.
5.3 PHP.
Mô hình MVC là một cách chia nhỏ ứng dụng, thậm chí là một phần của giao diện của ứng
dụng thành 3 phần: model, view và controller. MVC được phát triển ban đầu để ánh xa các
quá trình truyền thống như: nhập, xử lý , xuất thành các lĩnh vực GUI:
Input  Processing  Output
Controller  Model  View.
• Model.
Một model là một đối tượng đại diện cho dữ liệu hoặc một hành động như: một bảng trong
CSDL .
Model quản lý hành vi hoặc dữ liệu của miền ứng dụng, phản hồi lại các yêu cầu truy xuất
thông tin về trạng thái của nó và phản hồi lại các chỉ thị để thay đổi trạng thái.
Model là một phần đại diện cho trạng thái và các hành vi mức thấp của component. Nó quả
lý trạng thái và thực hiện các sự chuyển đổi trạng thái. Model không có tri thức cụ thể về
controller hoặc view của nó. View là một phần quản lý sự hiên thị hình ảnh của trạng thái
được đưa ra bởi model. Một model có thể có nhiều hơn 1 view.
Chú ý rằng model không cần thiết có một database cố định. Nó có thể truy cập qua một đối
tượng truy cập dữ liệu (DAO) riêng biệt.
• View.

Một view là một số form hiện thị trạng thái của model.
View quản lý việc xuất ra các dữ liệu đồ họa hay text
View chỉ ra nội dung của một model. Nó truy câp vào CSDL qua model và xác định cách dữ
liệu được đưa ra.
• Controller.
Một controller cung cấp các cơ sở đề thay đổi trạng thái của model. Controller dịch các input
từ chuột và bàn phím của người dung, truyền lệnh đến model hay view để thay đổi cho phù
hợp.
Trường đại học Bách Khoa Hà Nội.
Một controller là các phương thức mà người dung tương tác với ứng dụng. Một controller
cho phép nhập thông tin từ người dung và chỉ thị cho model và view thực hiện các hành động
dựa trên đầu vào. Trong thực tế, controller có thể phản hồi cho việc ánh xạ các action của
người cuối đến các phản hồi của ứng dụng.
Controller dịch các tương tác với view thành các hành động để thực thi bởi model. Trong một
GUI client đơn lẻ, các tương tác người dung có thể là các click vào button và nhiều sự lựa
chọn trong khi một ứng dụng web xuất hiện như một request HTTP GET hoặc POST. Các
action được thực hiện bởi model bao gồm việc kích hoạt các quá trình nghiệp vụ hoặc thay
đổi trạng thái của model. Dựa trên các tương tác người dung và đầu ra của các tương tác với
model, controller phản hồi bằng việc xuất ra một view phù hợp.
Controller là thành phẩn quản lý tương tác người dung với model. Nó cung cấp các cơ chế để
các thay đổi trạng thái của model được tạo ra.
Trường đại học Bách Khoa Hà Nội.
6. So sánh các ngôn ngữ
Ngôn ngữ
Thuộc tính
C# PHP JAVA
Tốc độ Chậm Nhanh. Nhanh
Hệ điều hành Window. Window,
Linux(Với linux,
tốn ít CPU, RAM

hơn, tốc độ truy
cập ổ định dạng
ext4 có tốc độ
nhanh hơn NTFS)
Chạy trên
nhiều HĐH.
Chi phí Yêu cầu có bản
quyền của HĐH
hoặc sản phẩm.
Nhiều nguồn free,
chi phí thấp.
Đa số free
Hỗ trợ Được hỗ trợ bởi
nhà cung cấp.
Không có. Chỉ có
thể tìm hỗ trợ qua
các diễn đàn.
Không có.
Chỉ có thể
tìm hỗ trợ
qua các diễn
đàn.
Thời gian
deploy
Chậm Nhanh. Chậm
Công cụ lập
trình
Microsoft Visual
Studio
Đa dạng. Đa dạng.

Mức độ phổ
biến
(Netcraft's July
2010 Web
Server Survey )
26% 55% 19%
Với các so sánh trên, chúng ta nhận thấy PHP là một ngôn ngữ rất phổ biến, nhiều ưu điểm.
Vì vậy, phần tiếp theo chúng ta sẽ đi vào tìm hiểu việc triển khai mô hình MVC trong ngôn
ngữ PHP qua framework Yii.
Trường đại học Bách Khoa Hà Nội.
7. Ví dụ minh họa: Framework Yii
a. Tổng quan.
+ Yii triển khai trên mô hình thiết kế MVC, được thực hiện rộng rãi trong lập
trinh web. MVC giúp nhà phát triển có thể dễ dàng thay đổi các phần mà
không thay đổi phần khác. Trong MVC, model đưa ra thông tin và các luật,
view chưa các yếu tố của giao diện người dùng, và controller quản lý tương
tác gữa model và view.
+ Bên cạnh việc triển khai MVC, Yii cũng giới thiệu 1 front-controller được
gọi là Application, nó đóng gói ngữ cảnh thực thi việc xử lý các yêu cầu.
Application thu thập một vài thông tin về một yêu cầu người dùng và sau
đó gửi nó vào 1 controller phù hợp cho việc trao đổi sau này.
+ Sơ đồ sau cho thấy cấu trúc tĩnh của 1 ứng dụng Yii
Trường đại học Bách Khoa Hà Nội.
+ Quy trình làm việc cụ thể:
1. Một người sử tạo một request với URL:
và web server trao
đổi yêu cầu bằng việc thực thi bootstrap script index.php
2. Bootstrap script tạo ra một thực thể Application và chạy chúng.
3. Application lấy thông tin chi tiết về yêu cầu người dùng từ một thanh
phần của application được đặt tên là request.

4. Application xác controller được request và action với sự giúp đỡ của
một thành phần application tên là urlManager. Trường hợp này
controller là post sẽ được thay thế bằng lớp PostController và action là
show, phương thức thực tế của nó sẽ được xác đinh bưởi controller.
Trường đại học Bách Khoa Hà Nội.
5. Application tạo ra một thực thể của controller được request để trao
đổi request của người dùng sau này. Controller xác định action show
tương ứng phương thức actionShow trong lớp controller. Nó sau đó sẽ
tạo ra và thực thi bộ lọc liên kết với action này. Action được thực thi
nếu nó được cho phép bởi bộ lọc.
6. Action đọc một model có id=1 trong cơ sở dữ liệu.
7. Action trả lại môt view có tên show với model post.
8. View đọc và hiển thị các thuộc tính của model post.
9. View thực thi một vài widget (thành phần được nhúng vào một view
script để tạo ra giao diện người dùng phức tạp).
10. View trả lại kết quả được nhúng vào trong một layout (Một view
đặc biệt được sử dụng để trang trí các view, thường là 1 phần của giao
diện người dùng nằm giữa các view).
11. Action hoàn tất việc trả lại view và hiển thị kết quả tới người dùng.
b. Entry script.
Entry script là script PHP bootstrap trao đổi các yêu cầu người dùng ban
đầu. Nó chỉ là script php mà người dùng cuối có thể yêu cầu trực tiếp để
thực thi.
Trong hầu hết các trường hợp, entry script của một ứng dụng Yii chứa code
đơn giản như sau:
// remove the following line when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// include Yii bootstrap file
require_once('path/to/yii/framework/yii.php');
// create application instance and run

$configFile='path/to/config/file.php';
Yii::createWebApplication($configFile)->run();
Script đầu tiên include file bootstrap framework Yii yii.php. Sau đó nó tạo
ra một ứng dụng web với cấu hình xác định và chạy chúng.
Trường đại học Bách Khoa Hà Nội.
c. Application
Đối tượng application đóng gói ngữ cảnh thực thi và request được xử lý bên
trong nó. Nhiệm vụ chính của nó là thu thập một vài thông tin cơ bản về
request, và gửi nó đến đúng controller để xử lý sau này. Nó cũng đáp ứng
như trung tâm lưu trữ các thiết lập cấu hình mức application. Vì lý do này
nó được gọi là front-controller.
Đối tượng application được hình thành như một đối tượng duy nhất bởi
entry script, nó có thể truy cập bất kì nơi nào theo Yii::app()
+ Cấu hình application.
Mặc định, đối tượng application là một thực thể của CWebApplication (đối
tượng có nhiệm vụ quản lý các controller). Để tùy biến chúng, thông thường Yii
cung cấp một file thiết lập cấu hình để hình thành giá trị đặc tính khi nó được cài
đặt. Một cách khác là thay đổi nó để extend CWebApplication.
Cấu hình là một mảng của các cặp giá trị khóa. Mỗi khóa cho biết tên
của đặc tính của thực thể application, và mỗi giá trị tương ứng với giá trị
đặc tính.Ví dụ:
array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)
Yii thường lưu trữ cấu hình trong 1 script php tách biệt. Bên trong
script, Yii trả lại mảng cấu hình như sau:
return array( );
Để áp dụng cấu hình, thường sử dụng entry script.
$app=Yii::createWebApplication($configFile);

+ Thư mục cơ sở của application.
Thư mục cơ sở của Application là thư mục root, bên trong đó, tất cả các
script PHP nhạy cảm và dữ liệu cư trú. Mặc định, nó là một thư mục con
được đặt tên là protected, nằm dưới thư mục chứa entry script, nó có thể
được tùy biến bằng việc thiết lập đặc tính basePath trong cấu hình
application.
Trường đại học Bách Khoa Hà Nội.
Chức năng của đối tượng application có thể dễ dàng đươc tùy biến và bổ
sung sử dụng kiến trúc các thành phần linh hoạt của nó. Đối tượng quản
lý một tập các thành phần ứng dựng, mỗi thành phần thực hiện một
chức năng riêng biệt.
Bằng việc cấu hình đặc tính các thành phần của thực thể application,
chứng ta có thể tùy biến lớp và các giá trị đặc tính của bất kì thành phần
ứng dụng nào được sử dụng. Ví dụ: Chúng ta có thể cấu hình thành
phần CMemCache để nó có thể sử dụng nhiều server memcache cho
việc cache như sau:
array(

'components'=>array(

'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211,
'weight'=>60),
array('host'=>'server2', 'port'=>11211,
'weight'=>40),
),
),
),

)
Trong đó , chúng ta thêm yếu tố cache vào mảng các thành phần. Các
yếu tố cache chỉ rõ rằng các lớp của thành phần là CMemCache và các
server của nó.
Để truy cập một thành phần application. Sử dụng Yii::app()-
>ComponentID.
Một thành phần application có thể được disable bằng việc thiết lập
enabled bằng false trong cấu hình của nó. Khi nó giá trị null sẽ trả về
khi truy cập vào.
+ Các thành phần application chính.
Yii xác định trước một tập các thành phần application chính để cung cấp
các tính năng phổ biến giữa các ứng dụng web. Danh sách:
 assetManager: CAssetManager - Quản lý việc publish các file
có giá trị cá nhân.
Trường đại học Bách Khoa Hà Nội.
 authManager: CAuthManager - Quản lý điều khiển truy cập
dựa trên luật.
 cache: CCache - cung cấp chứng năng cache dữ liệu. Chú ý,
người dùng phải xác định lớp cụ thể (CMemCache,
CDbCache). Nếu không giá trị null sẽ trả về nếu truy cập vào
thành phần này.
 clientScript: CClientScript - quản lý các script client
 coreMessages: CPhpMessageSource - cung cấp các thông
điệp chính đã được dịch sử dụng bởi framework Yii.
 db: CDbConnection cung cấp kết nối cơ sở dữ liệu. Chú ý,
người dùng phải cấu hình connectionStringProperty để sử
dụng thành phần này.
 errorHandler: CErrorHandler – trao đổi các ngoại lệ và lỗi
PHP không bắt được.
 format: CFormatter - format các giá trị dữ liệu cho mục đích

hiển thị.
 messages: CPhpMessageSource - cung cấp các thông điệp đã
được dịch được sử dụng bởi ứng dụng PHP.
 request: CHttpRequest - cung cấp thông tin liên quan đến các
yêu cầu người dùng.
 securityManager: CSecurityManager - cung cấp các dịch vụ
liên quan đến bảo mật như băm và mã hóa.
 session: CHttpSession – cung cấp các chức năng liên quan
đến session
 statePersister: CStatePersister - cung cấp cơ chế cho việc duy
trì trạng thái toàn cục.
 urlManager: CUrlManager - provides URL parsing and
creation functionality.cung cấp chức năng phân tích và tạo ra
URL
Trường đại học Bách Khoa Hà Nội.
 user: CWebUser - vận chuyển các thông tin liên quan đến
định danh về người dùng hiện tại.
 themeManager: CThemeManager – quản lý các theme
+ Vòng đời của application.
Khi trao đổi một yêu cầu người dùng, một application sẽ trải qua vòng
đời sau.
1.Tiền khởi tại application với CApplication::preinit();
2.Lập lên lớp tự động tải và trao đổi lỗi.
3.Đăng ký các thành phần application chính.
4.Tải cấu hình application.
5.Khỏi tạo application với CApplication::init()
 Đăng ký các hành vi application.
 Tải các thành phần application tĩnh.
6.Dựng lên một sự kiện onBeginRequest
7.Xử lý yêu cầu người dùng

 Thu thập thông tin về yêu cầu
 Tạo ra một controller
 Chạy controller
8.Dựng lên một sự kiện onEndRequest.
d. Controller.
Một controller là một thực thể của CController hoặc của một lớp extend từ
CController. Nó được tạo ra bởi đối tượng application khi người dùng yêu
cầu nó. Khi một controller chạy, nó thực hiện action được request, thường
mang lại model cần thiết và render một view tương ứng. Một action, trong
dạng đơn giản nhất của nó, chỉ là một phương thức của lớp controller tên
của nó bắt đầu bằng action.
Trường đại học Bách Khoa Hà Nội.
Một controller có một action mặc đinh. Khi yêu cầu người dùng không xác
định rõ action nào để thực hiện, action mặc định sẽ được thực hiện. Mặc
định, action mặc định là index. Nó có thể được thay đổi bằng việc thiết lập
biến thực thể chung CController::defaultAction.
Đoạn code sau xác định một controller của site, một index action và một
contact action.
class SiteController extends CController
{
public function actionIndex()
{
//
}

public function actionContact()
{
//
}
}

+ Route.
Các Controller và action được xác định bưởi các ID. Một controller ID
trong format path/to/xyz, tương ứng với lớp controller trong file
protected/controllers/path/to/Xyzcontroller.php, nơi mà xyz nên được
thay thế bởi tên thực sư. Ví dụ post tương ứng với
protected/controllers/postController.php. Action ID là phương thức
action đăt tên không có tiền tố action. Ví dụ: nếu một lớp controller
chứa một phương thức actionEdit, ID của action tươn ứng sẽ là edit.
Các người dùng yêu cầu một controller và action cụ thể trong thuật ngữ
route. Một route được hình thành bằng việc móc nối controller ID và
một action ID, tách biệt bằng dấu “/”.
Một ứng dụng có thể chứa các modules. Route cho một controller action
bên trong một module ở dạng: ModuleID/controllerID/actionID. Chi
tiết, xem phần modules.
+ Sự hình thành controller.
Một thực thể controller được tạo ra khi CWebApplication điều khiển một
yêu cầu đến. ID của một controller cho trước, application sẽ sử dụng luật
sau để xác định lớp controller nào và file lớp nào liên quan.
Trường đại học Bách Khoa Hà Nội.
 Nếu CWebApplication::catchAllRequest được xác định, một controller
sẽ được tạo ra dựa trên property này, và controllerID được xác định
bởi người dùng sẽ được bỏ qua. Việc này được sử dụng chủ yếu để
đặt application trong mode duy trì và hiển thị một trang chú ý tĩnh.
 Nếu ID được tìm thấy trong CWebApplication::controllerMap, cấu
hình controller tương ứng sẽ được sử dụng để tạo ra thực thể
controller.
 Nếu ID nằm trong dạng ‘path/to/xyz tên lớp controller được xem
như là XyzController và file lớp tương ứng là
protected/controllers/path/to/XyzController.php. Nếu file lớp không
tồn tại một CHttpException sẽ được dựng lên.

Khi các module được sử dụng, quá trình trên có chút khác biệt.Cụ thể,
application sẽ kiểm tra ID có thay thể cho một controller bên trong
module hay không,nếu có, thực thể module sẽ được tạo ra trước, tiếp đó
là đến thực thể controller.
+ Action.
Như đã chú ý từ trước, một action có thể được xác định như một phương
thức mà tên nó bắt đầu bằng “action”. Một kỹ năng nâng cao để xác định
một lớp action và yêu cầu controller cung cấp nó khi được yêu cầu. Việc
này cho phép các action được tái sử dụng.
Để xác định một action mới:
class UpdateAction extends CAction
{
public function run()
{
// place the action logic here
}
}
Để controller biết action này, chúng ta override phương thức actions()
trong lớp controller.
class PostController extends CController
{
public function actions()
Trường đại học Bách Khoa Hà Nội.
{
return array(
'edit'=>'application.controllers.post.UpdateAction',
);
}
}
Trong đó chúng ta sử dụng path

‘application.controllers.post.UpdateAction để xác định file lớp action là
protected/controlles/post/UpdateAction.php
Bằng việc viết các action dựa trên lớp, chúng ta có thể tổ chứng một
chương tình trong một mô hình module. Ví dụ: Cấu trúc thư mục sau có
thể được tổ chức code cho các controller
protected/
controllers/
PostController.php
UserController.php
post/
CreateAction.php
ReadAction.php
UpdateAction.php
user/
CreateAction.phối
ListAction.php
ProfileAction.php
UpdateAction.php
+ Kết nối các tham số action.
Từ phiên bản 1.1.4 Yii đã hỗ trợ thêm các action tự động két nối các
thông số. Đó là một controller có thể xác định các thông số mà giá trị của
nó có thể tự động được lấy từ $_GET bởi Yii.
Trường đại học Bách Khoa Hà Nội.
Để minh họa nó làm việc như thế nào, hãy tưởng tượng chúng ta cần viết
một action create cho PostController action yêu cầu 2 thông số:
 Category: một số nguyên xác định category ID mà post mới được
tạo ra.
 Language: một xâu xác định ngôn ngữ mà code chưa post mới.
Ví dụ:
class PostController extends CController

{
public function actionCreate()
{
if(isset($_GET['category']))
$category=(int)$_GET['category'];
else
throw new CHttpException(404,'invalid request');

if(isset($_GET['language']))
$language=$_GET['language'];
else
$language='en';

// fun code starts here
}
}
Đến 1.1.5 Yii cũng hỗ trợ phát hiện các tham số action loại mảng. Ví dụ
class PostController extends CController
{
public function actionCreate(array $categories)
{
// Yii will make sure that $categories is an array
}
}
Bắt đầu từ 1.1.7 việc kết nối các tham số tự động cũng làm việc cho các
action dựa trên lớp. Khi phương thức run() của một lớp action được xác
địnhvới một số tham số, nó sẽ được cung cấp các giá trị tham số phù
hợp. Ví dụ:
class UpdateAction extends CAction
{

public function run($id)
Trường đại học Bách Khoa Hà Nội.
{
// $id will be populated with $_GET['id']
}
}
+ Filer.
Filter là một đoạn code được cấu hình để được thực thi trước hoặc sau
khi một action controller thực thi. Ví dụ: một bộ lọc điều khiển truy cập
được thực thi để đảm bảo rằng các người dùng được xác minh trước khi
thực thi các action yêu cầu.
Một action có thể có nhiều filter. Một filter có thể bảo vệ việc thực thi
của một action hay các filters không được thực thi.
Một filter có thể được xác định như một phương thức lớp controller. Tên
phương thức phải bắt đầu với “filter”. Ví dụ:
public function filterAccessControl($filterChain)
{
// call $filterChain->run() to continue filter and action
execution
}
Trong đó $filterChain là một thực thể của CFilterChain, nó đưa ra danh
sách các filter liên kết với action được yêu cầu. Bên trong một phương
thức filter, chúng ta có thể gọi $filterChain()->run() để tiếp tục filter
và thực thi action.
Một filter cũng có thể là một thực thể của CFilter hoặc là lớp con của
nó. Ví dụ:
class PerformanceFilter extends CFilter
{
protected function preFilter($filterChain)
{

// logic being applied before the action is executed
return true; // false if the action should not be
executed
}

protected function postFilter($filterChain)
{
// logic being applied after the action is executed

×