運(yùn)行應(yīng)用
安裝 Yii 后,就有了一個(gè)可運(yùn)行的 Yii 應(yīng)用, 根據(jù)配置的不同,可以通過
http://hostname/basic/web/index.php 或 http://hostname/index.php 訪問。
本章節(jié)將介紹應(yīng)用的內(nèi)建功能,如何組織代碼, 以及一般情況下應(yīng)用如何處理請求。
補(bǔ)充:為簡單起見,在整個(gè)“入門”板塊都假定你已經(jīng)把 basic/web
設(shè)為 Web 服務(wù)器根目錄并配置完畢, 你訪問應(yīng)用的地址會(huì)是http://lostname/index.php
或類似的。 請按需調(diào)整 URL。
Note that unlike framework itself, after project template is installed it's all yours. You're free to add or delete code and overall modify it as you need.
功能
一個(gè)安裝完的基本應(yīng)用包含四頁:
主頁,當(dāng)你訪問http://hostname/index.php
時(shí)顯示,
“About” 頁,
“Contact” 頁, 顯示一個(gè)聯(lián)系表單,允許終端用戶通過 Email 聯(lián)系你,
“Login” 頁, 顯示一個(gè)登錄表單,用來驗(yàn)證終端用戶。試著用 “admin/admin” 登錄, 你可以看到當(dāng)前是登錄狀態(tài),已經(jīng)可以“退出登錄”了。
這些頁面使用同一個(gè)頭部和尾部。 頭部包含了一個(gè)可以在不同頁面間切換的導(dǎo)航欄。
在瀏覽器底部可以看到一個(gè)工具欄。這是 Yii 提供的很有用的調(diào)試工具, 可以記錄并顯示大量的調(diào)試信息,例如日志信息,響應(yīng)狀態(tài),數(shù)據(jù)庫查詢等等。
Additionally to the web application, there is a console script called yii
, which is located in the applications base directory. This script can be used to run background and maintenance tasks for the application, which are described in the Console Application Section.
執(zhí)行命令
php yii serve
監(jiān)聽localhost:8080
(如果端口8080被占用,可以使用命令:php yii serve --port='你要監(jiān)聽的端口號(hào)'監(jiān)聽端口)
現(xiàn)在可以使用瀏覽器通過如下 URL 訪問剛安裝完的 Yii 應(yīng)用了:
http://localhost:8080/
Yii 實(shí)現(xiàn)了模型-視圖-控制器 (MVC)設(shè)計(jì)模式,這點(diǎn)在上述目錄結(jié)構(gòu)中也得以體現(xiàn)。
models 目錄包含了所有模型類,
views目錄包含了所有視圖腳本,
controllers目錄包含了所有控制器類。
以下圖表展示了一個(gè)應(yīng)用的靜態(tài)結(jié)構(gòu):


每個(gè)應(yīng)用都有一個(gè)入口腳本 web/index.php
, 這是整個(gè)應(yīng)用中唯一可以訪問的 PHP 腳本。 入口腳本接受一個(gè) Web 請求并創(chuàng)建應(yīng)用實(shí)例去處理它。 應(yīng)用在它的組建輔助下解析請求, 并分派請求至 MVC 元素。視圖使用小部件去創(chuàng)建復(fù)雜和動(dòng)態(tài)的用戶界面。
請求生命周期
以下圖表展示了一個(gè)應(yīng)用如何處理請求:

1.用戶向入口腳本 web/index.php發(fā)起請求。
2.入口腳本加載應(yīng)用配置 并創(chuàng)建一個(gè)應(yīng)用實(shí)例去處理請求。
3.應(yīng)用通過請求組件 解析請求的路由。
4.應(yīng)用創(chuàng)建一個(gè)控制器實(shí)例去處理請求。
5.控制器創(chuàng)建一個(gè)操作實(shí)例并針對操作執(zhí)行過濾器。
6.如果任何一個(gè)過濾器返回失敗,則操作退出。
7.如果所有過濾器都通過,操作將被執(zhí)行。
8.操作會(huì)加載一個(gè)數(shù)據(jù)模型,或許是來自數(shù)據(jù)庫。
9.操作會(huì)渲染一個(gè)視圖,把數(shù)據(jù)模型提供給它。
10.渲染結(jié)果返回給響應(yīng)組件。
11.響應(yīng)組件發(fā)送渲染結(jié)果給用戶瀏覽器。