Это объект, который предоставляет доступ к нескольким сервисам. В Yii2 сервисами являются компоненты. Service Locator реализуется как наследник или экземпляр yii\di\ServiceLocator
.
$app
- тоже Service Locator.
use yii\di\ServiceLocator;
$locator = new ServiceLocator;
Происходит с помощью метода set
. Первый параметр - идентификатор компонента, его имя. Второй параметр - класс компонента и/или его настройки.
$locator->set('mysession', 'yii\web\DbSession');
или
$locator->set('db',[
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=test',
'username' => 'test',
'password' => 'TeSt',
]);
есть еще варианты: http://www.yiiframework.com/doc-2.0/yii-di-servicelocator.html#set()-detail
Для обращения используется предварительно заданный ID
$session = $locator->get('mysession');
$session = $locator->mysession;
В приложении задаются с помощью конфигурации подобной следующей:
[
'components' => [
'session' => 'yii\web\DbSession'
],
]
Компоненты создаются лениво, т. е. при первом обращении к get
или по ->
, в магическом методе __get
ServiceLocator
.
Для автозагрузки дополнительно укажите идентификатор компонента в параметре bootstrap
конфигурации:
[
'bootstrap' => [
'session'
],
'components' => [
'session' => 'yii\web\DbSession'
],
]