首頁  >  文章  >  後端開發  >  Yii框架官方教學增補篇6-基礎知識:應用、元件、設定、生命週期

Yii框架官方教學增補篇6-基礎知識:應用、元件、設定、生命週期

黄舟
黄舟原創
2017-02-11 09:32:251388瀏覽



應用是指請求處理中的執行上下文。它的主要任務是分析使用者請求並將其分派到適當的控制器中以作進一步處理。 它同時作為服務中心,維護應用程式層級的配置。有鑑於此,應用也叫做前端控制器

應用程式由入口腳本建立為一個單例物件。這個應用程式單例物件可以在任何地方透過 Yii::app() 存取。

1. 應用程式設定

預設情況下,應用程式是一個 CWebApplication 的實例。要自訂它,我們通常需要提供一個設定檔 (或陣列) 以建立應用程式實例時初始化其屬性值。自訂應用程式的另一種方式是繼承 CWebApplication。

配置是一個鍵值對數組。每個鍵代表應用實例中某屬性的名字,每個值即對應屬性的初始值。 例如,以下的配置設定了應用的 name 和 defaultController 屬性。


array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)

我們通常在一個單獨的PHP 腳本(e.g.protected/config/main.php)中保存這些配置。在腳本中, 我們透過以下方式返回此配置數組:


return array(...);

要應用此配置,我們將配置文件的名字作為參數傳遞給應用的構造器,或像下面這樣傳遞到Yii ::createWebApplication() 。這通常在 入口腳本 中完成:


$app=Yii::createWebApplication($configFile);

提示: 如果應用配置非常複雜,我們可以將它分割為若干文件,每個文件傳回給數組中的一部分。 然後,在主設定檔中,我們呼叫PHP的 include() 包含其餘的設定檔並將它們合併為一個完整的設定陣列。

2. 應用基礎目錄

應用基礎目錄指包含了所有安全敏感的PHP腳本和資料的根目錄。預設狀態下,它是一個位於含有入口腳本目錄的名為protected 的子目錄。它可以透過設定 application configuration 中的 basePath 屬性來自訂。

在應用程式基礎目錄下的內容應該保護起來防止網站訪客直接存取。對於 Apache HTTP 伺服器, 這可以透過在基礎目錄中放置一個 .htaccess 檔案很簡單的實作。 .htaccess 內容如下:

deny from all

3. 應用元件

應用的功能可以透過其靈活的元件結構輕易地自訂或增強。應用程式管理了一系列應用元件,每個元件實現一特定功能。 例如,應用程式透過 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),
            ),
        ),
    ),
)

cache 元素顯示此元件的類別是 CMemCache, 他的servers 屬性應依此初始化。

要存取一個應用元件,使用 Yii::app()->ComponentID ,其中的 ComponentID 是指元件的ID(例如Yii::app()->cache)。

應用的元件可以透過在其配置中設定 enabled 為 false 來停用。當我們存取被禁用的元件時將傳回 Null。

提示: 預設情況下,應用程式元件會依需求建立。這意味著一個應用的元件如果沒有在一個使用者請求中被訪問,它可能根本不會被創建。 因此,如果一個應用程式配置了許多元件,其整體效能可能並不會下降。有的應用元件 (例如 CLogRouter) 可能需要在無論它們是否被存取的情況下都要建立。 要實現這個,需將其ID列在應用的preload

 屬性裡。

4. 核心應用元件

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 解析和建立相關功能

  • user: CWebUser - 提供目前使用者的識別資訊。

  • themeManager: CThemeManager - 管理主題。

5. 應用的生命週期

當處理使用者請求時,應用程式將經歷以下宣告週期:

  1. 透過 CApplication::preinit() 預初始化應用程式

  2. 透過 CApplication::preinit() 預先初始化應用程式
  3. 與錯誤處理;
  4. 註冊核心類別元件;
  5. 載入應用程式配置;
  6. 透過 CApplication::init() 靜態應用元件;
  • 觸發 onBeginRequest 事件;
  • 處理使用者請求:
  • 解析使用者請求;
  • 觸發 onEndRequest 事件。
    • 以上就是Yii框架官方教程增補篇6——基礎知識:應用、組件、配置、生命週期的內容,更多相關內容請關注PHP中文網(www.php.cn)!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn