yii基礎知識-應用

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

應用由 入口腳本 建立爲一個單例對象。這個應用單例對象能夠在任何地方經過 Yii::app() 訪問。php

1. 應用配置 

默認狀況下,應用是一個 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);

2. 應用基礎目錄 

應用基礎目錄指包含了全部安全敏感的PHP腳本和數據的根目錄。默認狀態下,它是一個位於含有入口腳本目錄的名爲 protected 的子目錄。它能夠經過設置 application configuration 中的 basePath 屬性自定義。api

在應用基礎目錄下的內容應該保護起來防止網站訪客直接訪問。對於 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),
            ),
        ),
    ),
)

如上所示,咱們在 components 數組中添加了 cache 元素。cache 元素代表此組件的類是 CMemCache, 他的servers 屬性應依此初始化。

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

應用的組件能夠經過在其配置中設置 enabled 爲 false 禁用。當咱們訪問被禁用的組件時將返回 Null。

4. 核心應用組件 

Yii 預約義了一系列核心應用組件,提供常見 Web 應用中所用的功能。例如, request 組件用於解析用戶請求並提供例如 URL,cookie 等信息。 經過配置這些核心組件的屬性,咱們能夠在幾乎全部的方面修改Yii 的默認行爲。

下面咱們列出了由 CWebApplication 預約義的核心組件。

5. 應用的生命週期 

當處理用戶請求時,應用將經歷以下聲明週期:

  1. 經過 CApplication::preinit() 預初始化應用;

  2. 設置類的自動裝載器和錯誤處理;

  3. 註冊核心類組件;

  4. 加載應用配置;

  5. 經過 CApplication::init() 初始化應用:

    • 註冊應用行爲;
    • 載入靜態應用組件;
  6. 觸發 onBeginRequest 事件;

  7. 處理用戶請求:

    • 解析用戶請求;
    • 建立控制器;
    • 運行控制器;
  8. 觸發 onEndRequest 事件。

相關文章
相關標籤/搜索