|
@@ -0,0 +1,77 @@
|
|
|
+# 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'
|
|
|
+ ],
|
|
|
+]
|
|
|
+```
|
|
|
+
|