應(yīng)用是指請(qǐng)求處理中的執(zhí)行上下文。它的主要任務(wù)是分析用戶請(qǐng)求并將其分派到合適的控制器中以作進(jìn)一步處理。 它同時(shí)作為服務(wù)中心,維護(hù)應(yīng)用級(jí)別的配置。鑒于此,應(yīng)用也叫做前端控制器。
應(yīng)用由入口腳本創(chuàng)建為一個(gè)單例對(duì)象。這個(gè)應(yīng)用單例對(duì)象可以在任何地方通過(guò)?Yii::app()?訪問(wèn)。
默認(rèn)情況下,應(yīng)用是一個(gè)?CWebApplication?的實(shí)例。要自定義它,我們通常需要提供一個(gè)配置文件 (或數(shù)組) 以創(chuàng)建應(yīng)用實(shí)例時(shí)初始化其屬性值。自定義應(yīng)用的另一種方式是繼承?CWebApplication。
配置是一個(gè)鍵值對(duì)數(shù)組。每個(gè)鍵代表應(yīng)用實(shí)例中某屬性的名字,每個(gè)值即相應(yīng)屬性的初始值。 例如,如下的配置設(shè)定了應(yīng)用的?name?和?defaultController?屬性。
array( 'name'=>'Yii Framework', 'defaultController'=>'site', )
我們通常在一個(gè)單獨(dú)的PHP 腳本(e.g.protected/config/main.php)中保存這些配置。在腳本中, 我們通過(guò)以下方式返回此配置數(shù)組:
return array(...);
要應(yīng)用此配置,我們將配置文件的名字作為參數(shù)傳遞給應(yīng)用的構(gòu)造器,或像下面這樣傳遞到Y(jié)ii::createWebApplication()?。這通常在?入口腳本?中完成:
$app=Yii::createWebApplication($configFile);
提示:?如果應(yīng)用配置非常復(fù)雜,我們可以把它分割為若干文件,每個(gè)文件返回配置數(shù)組中的一部分。 然后,在主配置文件中,我們調(diào)用PHP的?include()?包含其余的配置文件并把它們合并為一個(gè)完整的配置數(shù)組。
應(yīng)用基礎(chǔ)目錄指包含了所有安全敏感的PHP腳本和數(shù)據(jù)的根目錄。默認(rèn)狀態(tài)下,它是一個(gè)位于含有入口腳本目錄的名為protected?的子目錄。它可以通過(guò)設(shè)置?application configuration?中的?basePath?屬性自定義。
在應(yīng)用基礎(chǔ)目錄下的內(nèi)容應(yīng)該保護(hù)起來(lái)防止網(wǎng)站訪客直接訪問(wèn)。對(duì)于?Apache HTTP 服務(wù)器, 這可以通過(guò)在基礎(chǔ)目錄中放置一個(gè)?.htaccess?文件很簡(jiǎn)單的實(shí)現(xiàn)。?.htaccess?內(nèi)容如下:
deny from all
應(yīng)用的功能可以通過(guò)其靈活的組件結(jié)構(gòu)輕易地自定義或增強(qiáng)。應(yīng)用管理了一系列應(yīng)用組件,每個(gè)組件實(shí)現(xiàn)一特定功能。 例如,應(yīng)用通過(guò)?CUrlManager?和?CHttpRequest?的幫助解析來(lái)自用戶的請(qǐng)求。
通過(guò)配置應(yīng)用的?components?屬性, 我們可以自定義應(yīng)用中用到的任何組件類及其屬性值。例如,我們可以配置應(yīng)用的CMemCache?組件, 這樣它就可以使用多個(gè) memcache 服務(wù)器實(shí)現(xiàn)緩存:
array( ...... 'components'=>array( ...... 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array('host'=>'server1', 'port'=>11211, 'weight'=>60), array('host'=>'server2', 'port'=>11211, 'weight'=>40), ), ), ), )
如上所示,我們?cè)?components?數(shù)組中添加了?cache?元素。cache?元素表明此組件的類是?CMemCache, 他的servers?屬性應(yīng)依此初始化。
要訪問(wèn)一個(gè)應(yīng)用組件,使用?Yii::app()->ComponentID?,其中的?ComponentID?是指組件的ID(例如Yii::app()->cache)。
應(yīng)用的組件可以通過(guò)在其配置中設(shè)置?enabled?為 false 禁用。當(dāng)我們?cè)L問(wèn)被禁用的組件時(shí)將返回 Null。
提示:?默認(rèn)情況下,應(yīng)用組件會(huì)按需創(chuàng)建。這意味著一個(gè)應(yīng)用的組件如果沒(méi)有在一個(gè)用戶請(qǐng)求中被訪問(wèn),它可能根本不被創(chuàng)建。 因此,如果一個(gè)應(yīng)用配置了很多組件,其總體性能可能并不會(huì)下降。有的應(yīng)用組件 (例如?CLogRouter) 可能需要在無(wú)論它們是否被訪問(wèn)的情況下都要被創(chuàng)建。 要實(shí)現(xiàn)這個(gè),需將其ID列在應(yīng)用的preload?屬性里。
Yii 預(yù)定義了一系列核心應(yīng)用組件,提供常見(jiàn) Web 應(yīng)用中所用的功能。例如,?request?組件用于解析用戶請(qǐng)求并提供例如 URL,cookie 等信息。 通過(guò)配置這些核心組件的屬性,我們可以在幾乎所有的方面修改Yii 的默認(rèn)行為。
下面我們列出了由?CWebApplication?預(yù)定義的核心組件。
assetManager:?CAssetManager?- 管理私有資源文件的發(fā)布。
authManager:?CAuthManager?- 管理基于角色的訪問(wèn)控制 (RBAC).
cache:?CCache?- 提供數(shù)據(jù)緩存功能。注意,你必須指定實(shí)際的類(例如CMemCache,?CDbCache)。 否則,當(dāng)你訪問(wèn)此組件時(shí)將返回 NULL。
clientScript:?CClientScript?- 管理客戶端腳本 (javascripts 和 CSS).
coreMessages:?CPhpMessageSource?- 提供 Yii 框架用到的核心信息的翻譯。
db:?CDbConnection?- 提供數(shù)據(jù)庫(kù)連接。注意,使用此組件你必須配置其?connectionString?屬性。
errorHandler:?CErrorHandler?- 處理未捕獲的 PHP 錯(cuò)誤和異常。
format:?CFormatter?- 格式化數(shù)值顯示。此功能從版本 1.1.0 起開(kāi)始提供。
messages:?CPhpMessageSource?- 提供Yii應(yīng)用中使用的信息翻譯。
request:?CHttpRequest?- 提供關(guān)于用戶請(qǐng)求的信息。
securityManager:?CSecurityManager?- 提供安全相關(guān)的服務(wù),例如散列,加密。
session:?CHttpSession?- 提供session相關(guān)的功能。
statePersister:?CStatePersister?- 提供全局狀態(tài)持久方法。
urlManager:?CUrlManager?- 提供 URL 解析和創(chuàng)建相關(guān)功能
user:?CWebUser?- 提供當(dāng)前用戶的識(shí)別信息。
themeManager:?CThemeManager?- 管理主題。
當(dāng)處理用戶請(qǐng)求時(shí),應(yīng)用將經(jīng)歷如下聲明周期:
通過(guò)?CApplication::preinit()?預(yù)初始化應(yīng)用;
設(shè)置類的自動(dòng)裝載器和錯(cuò)誤處理;
注冊(cè)核心類組件;
加載應(yīng)用配置;
通過(guò)?CApplication::init()?初始化應(yīng)用:
注冊(cè)應(yīng)用行為;
載入靜態(tài)應(yīng)用組件;
觸發(fā)?onBeginRequest?事件;
處理用戶請(qǐng)求:
解析用戶請(qǐng)求;
創(chuàng)建控制器;
運(yùn)行控制器;
觸發(fā)?onEndRequest?事件。
以上就是Yii框架官方教程增補(bǔ)篇6——基礎(chǔ)知識(shí):應(yīng)用、組件、配置、生命周期的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(miracleart.cn)!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)