1. YII 應用結(jié)構(gòu)
參照模型-視圖-控制器 (MVC)
入口腳本:終端用戶能直接訪問的 PHP 腳本, 負責啟動一個請求處理周期。
應用:能全局范圍內(nèi)訪問的對象构舟, 管理協(xié)調(diào)組件來完成請求.
應用組件:在應用中注冊的對象芥喇, 提供不同的功能來完成請求靴迫。
模塊:包含完整 MVC 結(jié)構(gòu)的獨立包佳镜, 一個應用可以由多個模塊組建启盛。
過濾器:控制器在處理請求之前或之后 需要觸發(fā)執(zhí)行的代碼霜第。
小部件:可嵌入到視圖中的對象葛家, 可包含控制器邏輯,可被不同視圖重復調(diào)用泌类。
application-structure.png
2. 入口腳本主要完成以下工作
* 定義全局常量癞谒;
* 注冊 [Composer 自動加載器](http://getcomposer.org/doc/01-basic-usage.md#autoloading)底燎;
* 包含 [Yii](https://www.yiichina.com/doc/api/2.0/yii) 類文件;
* 加載應用配置弹砚;
* 創(chuàng)建一個[應用](https://www.yiichina.com/doc/guide/2.0/structure-applications)實例并配置;
* 調(diào)用 [yii\base\Application::run()](https://www.yiichina.com/doc/api/2.0/yii-base-application#run()-detail) 來處理請求双仍。
3. 應用主體
應用主體是管理 Yii 應用系統(tǒng)整體結(jié)構(gòu)和生命周期的對象
Yii有兩種應用主體: 網(wǎng)頁應用主體 和 控制臺應用主體
應用主體中 重要的屬性要配置:
id 屬性用來區(qū)分其他應用的唯一標識ID。主要給程序使用桌吃。
basePath 指定該應用的根目錄朱沃。 根目錄包含應用系統(tǒng)所有受保護的源代碼
aliases 該屬性允許你用一個數(shù)組定義多個 別名。
bootstrap 這個屬性很實用茅诱,它允許你用數(shù)組指定啟動階段 bootstrapping process 需要運行的組件逗物。
屬性中的每個組件需要指定以下一項:
* 應用 組件 ID.
* 模塊 ID.
* 類名.
* 配置數(shù)組.
* 創(chuàng)建并返回一個組件的無名稱函數(shù).
catchAll 該屬性僅 Web applications 網(wǎng)頁應用支持。 它指定一個要處理所有用戶請求的 控制器方法瑟俭。通常在維護模式下使用
components 它允許你注冊多個在其他地方使用的 應用組件.
controllerMap 該屬性允許你指定一個控制器 ID 到任意控制器類
controllerNamespace 該屬性指定控制器類默認的命名空間翎卓,默認為app\controllers
language 該屬性指定應用展示給終端用戶的語言, 默認為 en 標識英文
modules 該屬性指定應用所包含的 模塊摆寄。
name 該屬性指定你可能想展示給終端用戶的應用名稱
params 該屬性為一個數(shù)組失暴,指定可以全局訪問的參數(shù)
sourceLanguage 該屬性指定應用代碼的語言,默認為 'en-US' 標識英文
timeZone 修改時區(qū)
charset 修改字符集
defaultRoute 配置默認路由
……
應用事件:
EVENT_BEFORE_REQUEST #該事件在應用處理請求 before 之前
EVENT_AFTER_REQUEST #該事件在應用處理請求 after 之后但在返回響應 before 之前觸發(fā)
EVENT_BEFORE_ACTION #該事件在每個 控制器動作 運行before之前會被觸發(fā)
EVENT_AFTER_ACTION #該事件在每個 控制器動作 運行 after 之后會被觸發(fā)
4. 應用主體生命周期
application-lifecycle.png
當運行 入口腳本 處理請求時微饥, 應用主體會經(jīng)歷以下生命周期:
入口腳本加載應用主體配置數(shù)組逗扒。
入口腳本創(chuàng)建一個應用主體實例:
調(diào)用 preInit() 配置幾個高級別應用主體屬性, 比如 basePath畜号。
注冊 error handler 錯誤處理方法缴阎。
配置應用主體屬性。
調(diào)用 init() 初始化简软,該函數(shù)會調(diào)用 bootstrap() 運行引導啟動組件蛮拔。
入口腳本調(diào)用 yii\base\Application::run() 運行應用主體:
觸發(fā) EVENT_BEFORE_REQUEST 事件。
處理請求:解析請求 路由 和相關(guān)參數(shù)痹升; 創(chuàng)建路由指定的模塊建炫、控制器和動作對應的類,并運行動作疼蛾。
觸發(fā) EVENT_AFTER_REQUEST 事件肛跌。
發(fā)送響應到終端用戶。
入口腳本接收應用主體傳來的退出狀態(tài)并完成請求的處理