W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
服務(wù)定位器是一個(gè)了解如何提供各種應(yīng)用所需的服務(wù)(或組件)的對(duì)象。在服務(wù)定位器中,每個(gè)組件都只有一個(gè)單獨(dú)的實(shí)例,并通過ID 唯一地標(biāo)識(shí)。用這個(gè) ID 就能從服務(wù)定位器中得到這個(gè)組件。
在 Yii 中,服務(wù)定位器是 yii\di\ServiceLocator 或其子類的一個(gè)實(shí)例。
最常用的服務(wù)定位器是application(應(yīng)用)對(duì)象,可以通過?\Yii::$app
?訪問。它所提供的服務(wù)被稱為application components(應(yīng)用組件),比如:request
、response
、urlManager
?組件。可以通過服務(wù)定位器所提供的功能,非常容易地配置這些組件,或甚至是用你自己的實(shí)現(xiàn)替換掉他們。
除了 application 對(duì)象,每個(gè)模塊對(duì)象本身也是一個(gè)服務(wù)定位器。
要使用服務(wù)定位器,第一步是要注冊(cè)相關(guān)組件。組件可以通過 yii\di\ServiceLocator::set() 方法進(jìn)行注冊(cè)。以下的方法展示了注冊(cè)組件的不同方法:
use yii\di\ServiceLocator;
use yii\caching\FileCache;
$locator = new ServiceLocator;
// 通過一個(gè)可用于創(chuàng)建該組件的類名,注冊(cè) "cache" (緩存)組件。
$locator->set('cache', 'yii\caching\ApcCache');
// 通過一個(gè)可用于創(chuàng)建該組件的配置數(shù)組,注冊(cè) "db" (數(shù)據(jù)庫)組件。
$locator->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
]);
// 通過一個(gè)能返回該組件的匿名函數(shù),注冊(cè) "search" 組件。
$locator->set('search', function () {
return new app\components\SolrService;
});
// 用組件注冊(cè) "pageCache" 組件
$locator->set('pageCache', new FileCache);
一旦組件被注冊(cè)成功,你可以任選以下兩種方式之一,通過它的 ID 訪問它:
$cache = $locator->get('cache');
// 或者
$cache = $locator->cache;
如上所示, yii\di\ServiceLocator 允許通過組件 ID 像訪問一個(gè)屬性值那樣訪問一個(gè)組件。當(dāng)你第一次訪問某組件時(shí),yii\di\ServiceLocator 會(huì)通過該組件的注冊(cè)信息創(chuàng)建一個(gè)該組件的實(shí)例,并返回它。之后,如果再次訪問,則服務(wù)定位器會(huì)返回同一個(gè)實(shí)例。
你可以通過 yii\di\ServiceLocator::has() 檢查某組件 ID 是否被注冊(cè)。若你用一個(gè)無效的 ID 調(diào)用 yii\di\ServiceLocator::get(),則會(huì)拋出一個(gè)異常。
因?yàn)榉?wù)定位器,經(jīng)常會(huì)在創(chuàng)建時(shí)附帶配置信息,因此我們提供了一個(gè)可寫的屬性,名為 yii\di\ServiceLocator::setComponents(),這樣就可以配置該屬性,或一次性注冊(cè)多個(gè)組件。下面的代碼展示了如何用一個(gè)配置數(shù)組,配置一個(gè)應(yīng)用并注冊(cè)"db","cache" 和 "search" 三個(gè)組件:?`````php return [
// ...
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
'cache' => 'yii\caching\ApcCache',
'search' => function () {
return new app\components\SolrService;
},
],
];?`````
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: