一 目錄文件|-framework 框架核心庫|--base 底層類庫文件夾,包含Capplication(應用類,負責全局的用戶請求處理,它管理的應用組件集,將提供特定功能給整個應用程 序),CComponent(組件類,該文件包含了基于組件和事件驅動編程的基礎類,從版本1.1.0開始,一個行為的屬性(或者它的公共成員變量或它通 過getter和/或setter方法??定義的屬性)可以通過組件的訪問來調用),CBehavior(行為類,主要負責聲明事件和相應事件處理程序的 方法、將對象的行為附加到組件等等),CModel(模型類,為所有的數據模型提供的基類),CModule(是模塊和應用程序的基類,主要負責應用組件 和子模塊)等等|--caching 所有緩存方法,其中包含了Memcache緩存,APC緩存,數據緩存,CDummyCache虛擬緩存,CEAcceleratorCache緩存等等各種緩存方法|--cli YII項目生成腳本|--collections 用php語言構造傳統OO語言的數據存儲單元。如:隊列,棧,哈希表等等|--console YII控制臺|--db 數據庫操作類|--gii YII 代碼生成器(腳手架),能生成包括模型,控制器,視圖等代碼|--i18n YII 多語言,提供了各種語言的本地化數據,信息、文件的翻譯服務、本地化日期和時間格式,數字等|--logging 日志組件,YII提供了靈活和可擴展的日志記錄功能。消息記錄可分為根據日志級別和信息類別。應用層次和類別過濾器,可進一步選擇的消息路由到不同的目的 地,例如文件,電子郵件,瀏覽器窗口,等等|--messages 提示信息的多語言|--test YII提供的測試,包括單元測試和功能測試|--utils 提供了常用的格式化方法|--validators 提供了各種驗證方法|--vendors 這個文件夾包括第三方由Yii框架使用的資料庫|--views 提供了YII錯誤、日志、配置文件的多語言視圖|--web YII所有開發應用的方法|---actions 控制器操作類|---auth 權限認識類,包括身份認證,訪問控制過濾,基本角色的訪問控制等|---filters 過濾器,可被配置在控制器動作執行之前或之后執行。例如, 訪問控制過濾器將被執行以確保在執行請求的動作之前用戶已通過身份驗證;性能過濾器可用于測量控制器執行所用的時間|---form 表單生成方法|---helpers 視圖助手,包含GOOGLE Ajax API,創建HTML,JSON,javaSCRipT相關功能|---js JS庫|---renderers 視圖渲染組件|---services 封裝SoapServer并提供了一個基于WSDL的Web服務|---widgets 部件|---CArrayDataPRovider.php 可以配置的排序和分頁屬性自定義排序和分頁的行為|---CActiveDataProvider.php ActiveRecord方法類|---CController.php 控制器方法,主要負責協調模型和視圖之間的交互|---CPagination.php 分頁類|---CUploadedFile.php 上傳文件類|---CUrlManager.php URL管理|---CWebModule.php 應用模塊管理,應用程序模塊可被視為一個獨立的子應用等等方法|--.htaccess 重定向文件|--yii.php 引導文件|--YiiBase.php YiiBase類最主要的功能是注冊了自動加載類方法,加載框架要用到所有接口。|--yiic Yii linux 命令行腳本|--yiic.bat YII WINDOW 命令行腳本|--yiilite.php 它是一些常用到的 Yii 類文件的合并文件。在文件中,注釋和跟蹤語句都被去除。因此,使用 yiilite.php 將減少被引用的文件數量并避免執行跟蹤語句二 源碼分析1. 啟動網站的唯一入口程序 index.php :1. $yii=dirname(__FILE__).'/../framework/yii.php';2. $config=dirname(__FILE__).'/protected/config/main.php';3.4. // remove the following line when in production mode5. defined('YII_DEBUG') or define('YII_DEBUG',true);6.7. require_once($yii);8. Yii::createWebApplication($config)->run();上面的require_once($yii) 引用出了后面要用到的全局類Yii,Yii類是YiiBase類的完全繼承:1. class Yii extends YiiBase2. {3. }系統的全局訪問都是通過Yii類(即YiiBase類)來實現的,Yii類的成員和方法都是static類型。2. 類加載Yii利用PHP5提供的spl庫來完成類的自動加載。在YiiBase.php 文件結尾處1. spl_autoload_register(array('YiiBase','autoload'));將YiiBase類的靜態方法autoload 注冊為類加載器。 PHP autoload 的簡單原理就是執行 new 創建對象或通過類名訪問靜態成員時,系統將類名傳遞給被注冊的類加載器函數,類加載器函數根據類名自行找到對應的類文件并include 。下面是YiiBase類的autoload方法:1. public static function autoload($className)2. {3. // use include so that the error PHP file may appear4. if(isset(self::$_coreClasses[$className]))5. include(YII_PATH.self::$_coreClasses[$className]);6. else if(isset(self::$_classes[$className]))7. include(self::$_classes[$className]);8. else9. include
|