應(yīng)用組件(Application Components)

2018-02-24 15:40 更新

應(yīng)用組件

應(yīng)用主體是服務(wù)定位器,它部署一組提供各種不同功能的?應(yīng)用組件?來處理請求。 例如,urlManager組件負(fù)責(zé)處理網(wǎng)頁請求路由到對應(yīng)的控制器。db組件提供數(shù)據(jù)庫相關(guān)服務(wù)等等。

在同一個應(yīng)用中,每個應(yīng)用組件都有一個獨一無二的 ID 用來區(qū)分其他應(yīng)用組件,你可以通過如下表達(dá)式訪問應(yīng)用組件。

\Yii::$app->componentID

例如,可以使用?\Yii::$app->db?來獲取到已注冊到應(yīng)用的 yii\db\Connection, 使用?\Yii::$app->cache?來獲取到已注冊到應(yīng)用的 yii\caching\Cache。

第一次使用以上表達(dá)式時候會創(chuàng)建應(yīng)用組件實例,后續(xù)再訪問會返回此實例,無需再次創(chuàng)建。

應(yīng)用組件可以是任意對象,可以在?應(yīng)用主體配置配置 yii\base\Application::components 屬性 . 例如:

[
    'components' => [
        // 使用類名注冊 "cache" 組件
        'cache' => 'yii\caching\ApcCache',

        // 使用配置數(shù)組注冊 "db" 組件
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
        ],

        // 使用函數(shù)注冊"search" 組件
        'search' => function () {
            return new app\components\SolrService;
        },
    ],
]

補充:請謹(jǐn)慎注冊太多應(yīng)用組件,應(yīng)用組件就像全局變量,使用太多可能加大測試和維護的難度。 一般情況下可以在需要時再創(chuàng)建本地組件。

引導(dǎo)啟動組件

上面提到一個應(yīng)用組件只會在第一次訪問時實例化,如果處理請求過程沒有訪問的話就不實例化。 有時你想在每個請求處理過程都實例化某個組件即便它不會被訪問, 可以將該組件ID加入到應(yīng)用主體的 yii\base\Application::bootstrap 屬性中。

例如, 如下的應(yīng)用主體配置保證了?log?組件一直被加載。

[
    'bootstrap' => [
        // 將 log 組件 ID 加入引導(dǎo)讓它始終載入
        'log',
    ],
    'components' => [
        'log' => [
            // "log" 組件的配置
        ],
    ],
]

核心應(yīng)用組件

Yii 定義了一組固定ID和默認(rèn)配置的?核心?組件,例如 yii\web\Application::request 組件 用來收集用戶請求并解析?路由; yii\base\Application::db 代表一個可以執(zhí)行數(shù)據(jù)庫操作的數(shù)據(jù)庫連接。 通過這些組件,Yii應(yīng)用主體能處理用戶請求。

下面是預(yù)定義的核心應(yīng)用組件列表,可以和普通應(yīng)用組件一樣配置和自定義它們。 當(dāng)你配置一個核心組件,不指定它的類名的話就會使用Yii默認(rèn)指定的類。

  • yii\web\AssetManager: 管理資源包和資源發(fā)布,詳情請參考?管理資源?一節(jié)。
  • yii\db\Connection: 代表一個可以執(zhí)行數(shù)據(jù)庫操作的數(shù)據(jù)庫連接, 注意配置該組件時必須指定組件類名和其他相關(guān)組件屬性,如yii\db\Connection::dsn。 詳情請參考?數(shù)據(jù)訪問對象?一節(jié)。
  • yii\base\Application::errorHandler: 處理 PHP 錯誤和異常, 詳情請參考?錯誤處理?一節(jié)。
  • yii\i18n\Formatter: 格式化輸出顯示給終端用戶的數(shù)據(jù),例如數(shù)字可能要帶分隔符, 日期使用長格式。詳情請參考?格式化輸出數(shù)據(jù)一節(jié)。
  • yii\i18n\I18N: 支持信息翻譯和格式化。詳情請參考?國際化?一節(jié)。
  • yii\log\Dispatcher: 管理日志對象。詳情請參考?日志?一節(jié)。
  • yii\swiftmailer\Mailer: 支持生成郵件結(jié)構(gòu)并發(fā)送,詳情請參考?郵件?一節(jié)。
  • yii\base\Application::response: 代表發(fā)送給用戶的響應(yīng), 詳情請參考?響應(yīng)?一節(jié)。
  • yii\base\Application::request: 代表從終端用戶處接收到的請求, 詳情請參考?請求?一節(jié)。
  • yii\web\Session: 代表會話信息,僅在yii\web\Application 網(wǎng)頁應(yīng)用中可用, 詳情請參考?Sessions (會話) and Cookies?一節(jié)。
  • yii\web\UrlManager: 支持URL地址解析和創(chuàng)建, 詳情請參考?URL 解析和生成?一節(jié)。
  • yii\web\User: 代表認(rèn)證登錄用戶信息,僅在yii\web\Application 網(wǎng)頁應(yīng)用中可用, 詳情請參考?認(rèn)證?一節(jié)。
  • yii\web\View: 支持渲染視圖,詳情請參考?Views?一節(jié)。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號