應用程式是服務定位器。 它們託管一組所謂的應用程式組件,這些組件提供不同的服務來處理請求。 例如,urlManager
組件負責將 Web 請求路由到適當的控制器;db
組件提供與資料庫相關的服務;等等。
每個應用程式組件都有一個 ID,在同一個應用程式中的其他應用程式組件中唯一識別自己。 您可以透過以下表達式存取應用程式組件
\Yii::$app->componentID
例如,您可以使用 \Yii::$app->db
來取得資料庫連線,並使用 \Yii::$app->cache
來取得向應用程式註冊的主要快取。
應用程式組件在第一次透過上述表達式存取時建立。 任何後續的存取都將返回相同的組件實例。
應用程式組件可以是任何物件。 您可以透過在應用程式配置中配置 yii\base\Application::$components 屬性來註冊它們。 例如,
[
'components' => [
// register "cache" component using a class name
'cache' => 'yii\caching\ApcCache',
// register "db" component using a configuration array
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
// register "search" component using an anonymous function
'search' => function () {
return new app\components\SolrService;
},
],
]
資訊:雖然您可以註冊任意數量的應用程式組件,但您應該謹慎地執行此操作。 應用程式組件就像全域變數。 使用過多的應用程式組件可能會使您的程式碼更難以測試和維護。 在許多情況下,您可以簡單地建立一個本地組件並在需要時使用它。
如上所述,應用程式組件僅在第一次被存取時才会被實例化。 如果在請求期間完全沒有被存取,則不會被實例化。 然而,有時您可能希望為每個請求實例化一個應用程式組件,即使它沒有被明確存取。 若要這樣做,您可以將其 ID 列在應用程式的 bootstrap 屬性中。
您也可以使用閉包來啟動自訂組件。 不需要返回已實例化的組件。 閉包也可以僅用於在 yii\base\Application 實例化後執行程式碼。
例如,以下應用程式配置確保 log
組件始終被載入
[
'bootstrap' => [
'log',
function($app){
return new ComponentX();
},
function($app){
// some code
return;
}
],
'components' => [
'log' => [
// configuration for "log" component
],
],
]
Yii 定義了一組具有固定 ID 和預設配置的核心應用程式組件。 例如,request 組件用於收集有關使用者請求的資訊並將其解析為路由;db 組件表示一個資料庫連線,您可以使用它執行資料庫查詢。 正是借助這些核心應用程式組件,Yii 應用程式才能夠處理使用者請求。
以下是預定義的核心應用程式組件列表。 您可以像配置普通應用程式組件一樣配置和自訂它們。 當您配置核心應用程式組件時,如果您沒有指定其類別,將會使用預設類別。
發現錯字或您認為此頁面需要改進?
在 github 上編輯 !
註冊 或 登入 以發表評論。