# Service Locator, Components ## Service Locator Это объект, который предоставляет доступ к нескольким сервисам. В **Yii2** сервисами являются *компоненты*. **Service Locator** реализуется как наследник или экземпляр `yii\di\ServiceLocator`. `$app` - тоже **Service Locator**. ### Основные методы и свойства **Service Locator** #### Создание ```php use yii\di\ServiceLocator; $locator = new ServiceLocator; ``` #### Добавление сервиса Происходит с помощью метода `set`. Первый параметр - **идентификатор** компонента, его имя. Второй параметр - класс компонента и/или его настройки. ```php $locator->set('mysession', 'yii\web\DbSession'); ``` или ```php $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 ```php $session = $locator->get('mysession'); $session = $locator->mysession; ``` ## Компоненты В приложении задаются с помощью конфигурации подобной следующей: ```php [ 'components' => [ 'session' => 'yii\web\DbSession' ], ] ``` Компоненты создаются *лениво*, т. е. при первом обращении к `get` или по `->`, в магическом методе `__get` `ServiceLocator`. ### Автозагрузка компонентов Для автозагрузки дополнительно укажите **идентификатор** компонента в параметре `bootstrap` конфигурации: ```php [ 'bootstrap' => [ 'session' ], 'components' => [ 'session' => 'yii\web\DbSession' ], ] ```