應用是指請求處理中的執行上下文。它的主要任務是分析用戶請求並將其分派到合適的控制器中以做進一步處理。 它同時做爲服務中心,維護應用級別的配置。鑑於此,應用也叫作前端控制器
。javascript
應用由 入口腳本 建立爲一個單例對象。這個應用單例對象能夠在任何地方經過 Yii::app() 訪問。php
默認狀況下,應用是一個 CWebApplication 的實例。要自定義它,咱們一般須要提供一個配置文件 (或數組) 以建立應用實例時初始化其屬性值。自定義應用的另外一種方式是繼承 CWebApplication。前端
配置是一個鍵值對數組。每一個鍵表明應用實例中某屬性的名字,每一個值即相應屬性的初始值。 例如,以下的配置設定了應用的 name 和 defaultController 屬性。java
array( 'name'=>'Yii Framework', 'defaultController'=>'site', )
咱們一般在一個單獨的PHP 腳本(e.g.protected/config/main.php
)中保存這些配置。在腳本中, 咱們經過如下方式返回此配置數組:數據庫
return array(...);
要應用此配置,咱們將配置文件的名字做爲參數傳遞給應用的構造器,或像下面這樣傳遞到Yii::createWebApplication() 。這一般在 入口腳本 中完成:apache
$app=Yii::createWebApplication($configFile);
應用基礎目錄指包含了全部安全敏感的PHP腳本和數據的根目錄。默認狀態下,它是一個位於含有入口腳本目錄的名爲 protected
的子目錄。它能夠經過設置 application configuration 中的 basePath 屬性自定義。api
在應用基礎目錄下的內容應該保護起來防止網站訪客直接訪問。對於 Apache HTTP 服務器, 這能夠經過在基礎目錄中放置一個 .htaccess
文件很簡單的實現。 .htaccess
內容以下:數組
deny from all
應用的功能能夠經過其靈活的組件結構輕易地自定義或加強。應用管理了一系列應用組件,每一個組件實現一特定功能。 例如,應用經過 CUrlManager 和 CHttpRequest 的幫助解析來自用戶的請求。緩存
經過配置應用的 components 屬性, 咱們能夠自定義應用中用到的任何組件類及其屬性值。例如,咱們能夠配置應用的 CMemCache 組件, 這樣它就可使用多個 memcache 服務器實現緩存:安全
array( ...... 'components'=>array( ...... 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array('host'=>'server1', 'port'=>11211, 'weight'=>60), array('host'=>'server2', 'port'=>11211, 'weight'=>40), ), ), ), )
如上所示,咱們在 components
數組中添加了 cache
元素。cache
元素代表此組件的類是 CMemCache
, 他的servers
屬性應依此初始化。
要訪問一個應用組件,使用 Yii::app()->ComponentID
,其中的 ComponentID
是指組件的ID(例如Yii::app()->cache
)。
應用的組件能夠經過在其配置中設置 enabled
爲 false 禁用。當咱們訪問被禁用的組件時將返回 Null。
Yii 預約義了一系列核心應用組件,提供常見 Web 應用中所用的功能。例如, request 組件用於解析用戶請求並提供例如 URL,cookie 等信息。 經過配置這些核心組件的屬性,咱們能夠在幾乎全部的方面修改Yii 的默認行爲。
下面咱們列出了由 CWebApplication 預約義的核心組件。
assetManager: CAssetManager - 管理私有資源文件的發佈。
authManager: CAuthManager - 管理基於角色的訪問控制 (RBAC).
cache: CCache - 提供數據緩存功能。注意,你必須指定實際的類(例如CMemCache, CDbCache)。 不然,當你訪問此組件時將返回 NULL。
clientScript: CClientScript - 管理客戶端腳本 (javascripts 和 CSS).
coreMessages: CPhpMessageSource - 提供 Yii 框架用到的核心信息的翻譯。
db: CDbConnection - 提供數據庫鏈接。注意,使用此組件你必須配置其 connectionString 屬性。
errorHandler: CErrorHandler - 處理未捕獲的 PHP 錯誤和異常。
format: CFormatter - 格式化數值顯示。此功能從版本 1.1.0 起開始提供。
messages: CPhpMessageSource - 提供Yii應用中使用的信息翻譯。
request: CHttpRequest - 提供關於用戶請求的信息。
securityManager: CSecurityManager - 提供安全相關的服務,例如散列,加密。
session: CHttpSession - 提供session相關的功能。
statePersister: CStatePersister - 提供全局狀態持久方法。
urlManager: CUrlManager - 提供 URL 解析和建立相關功能
themeManager: CThemeManager - 管理主題。
當處理用戶請求時,應用將經歷以下聲明週期:
經過 CApplication::preinit() 預初始化應用;
設置類的自動裝載器和錯誤處理;
註冊核心類組件;
加載應用配置;
經過 CApplication::init() 初始化應用:
觸發 onBeginRequest 事件;
處理用戶請求:
觸發 onEndRequest 事件。