LocatorComponents.md 2.3 KB

Service Locator, Components

Service Locator

Это объект, который предоставляет доступ к нескольким сервисам. В Yii2 сервисами являются компоненты. Service Locator реализуется как наследник или экземпляр yii\di\ServiceLocator.

$app - тоже Service Locator.

Основные методы и свойства 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'
    ],
]