mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 05:48:11 +08:00
Russian translate concept-service-locator.md
Added Russian translate docs\guide-ru\concept-service-locator.md
This commit is contained in:
90
docs/guide-ru/concept-service-locator.md
Normal file
90
docs/guide-ru/concept-service-locator.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
Service Locator
|
||||||
|
===============
|
||||||
|
|
||||||
|
Service Locator является объектом, который знает, как обеспечить всевозможные службы (или компоненты), которые могут понадобиться в приложении.
|
||||||
|
В пределах Service Locator'а, каждый компонент имеет только один экземпляр, который уникально определяется с помощью идентификатора (ID).
|
||||||
|
Уникальный идентификатор (ID) может быть использован для извлечения компонента из Service Locator'а.
|
||||||
|
|
||||||
|
В Yii Service Locator является экземпляром класса [[yii\di\ServiceLocator]] или его дочернего класса.
|
||||||
|
|
||||||
|
Наиболее часто используемый Service Locator в Yii - это объект *приложения*, который можно получить через
|
||||||
|
`\Yii::$app`. Обеспечиваемые им службы называют *компонентами приложения*, такие как `запрос`, `ответ`, компоненты
|
||||||
|
`UrlManager'а`. Вы легко можете настроить эти компоненты или даже заменить их собственными реализациями,
|
||||||
|
благодаря функциональным службам, предоставляемым Service Locator'ом.
|
||||||
|
|
||||||
|
Помимо объекта приложения, объект каждого модуля так же является Service Locator'ом.
|
||||||
|
|
||||||
|
Для использования Service Locator'а первым шагом является регистрация компонентов.
|
||||||
|
Компонент может быть зарегистрирован с помощью [[yii\di\ServiceLocator::set()]].
|
||||||
|
Следующий код демонстрирует различные способы регистрации компонентов:
|
||||||
|
|
||||||
|
```php
|
||||||
|
use yii\di\ServiceLocator;
|
||||||
|
use yii\caching\FileCache;
|
||||||
|
|
||||||
|
$locator = new ServiceLocator;
|
||||||
|
|
||||||
|
// register "cache" using a class name that can be used to create a component
|
||||||
|
$locator->set('cache', 'yii\caching\ApcCache');
|
||||||
|
|
||||||
|
// register "db" using a configuration array that can be used to create a component
|
||||||
|
$locator->set('db', [
|
||||||
|
'class' => 'yii\db\Connection',
|
||||||
|
'dsn' => 'mysql:host=localhost;dbname=demo',
|
||||||
|
'username' => 'root',
|
||||||
|
'password' => '',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// register "search" using an anonymous function that builds a component
|
||||||
|
$locator->set('search', function () {
|
||||||
|
return new app\components\SolrService;
|
||||||
|
});
|
||||||
|
|
||||||
|
// register "pageCache" using a component
|
||||||
|
$locator->set('pageCache', new FileCache);
|
||||||
|
```
|
||||||
|
|
||||||
|
После того, как компонент зарегистрирован, вы можете получить к нему доступ, используя уникальный идентификатор (ID),
|
||||||
|
одним из двух следующих способов:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$cache = $locator->get('cache');
|
||||||
|
// or alternatively
|
||||||
|
$cache = $locator->cache;
|
||||||
|
```
|
||||||
|
|
||||||
|
Как видно выше, [[yii\di\ServiceLocator]] позволяет обратиться к компоненту, как к свойству,
|
||||||
|
при помощи идентификатора (ID) компонента.
|
||||||
|
При обращении к компоненту впервые, [[yii\di\ServiceLocator]] будет использовать информацию о регистрации компонента,
|
||||||
|
что бы создать новый экземпляр компонента и вернёт его.
|
||||||
|
В дальнейшем при обращении к компоненту снова, Service Locator вернёт тот же экземпляр.
|
||||||
|
|
||||||
|
|
||||||
|
Что бы проверить, был ли идентификатор (ID) компонента уже зарегистрирован, можно использовать [[yii\di\ServiceLocator::has()]].
|
||||||
|
Если вы вызовете [[yii\di\ServiceLocator::get()]] с недопустимым идентификатором (ID), тогда будет выброшено исключение.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Поскольку Service Locator`ы зачастую создаются с [конфигурациями](concept-configurations.md),
|
||||||
|
записываемое свойство с именем [[yii\di\ServiceLocator::setComponents()|components]] предоставляется так,
|
||||||
|
что Вы можете его настроить и зарегистрировать несколько компонентов одновременно.
|
||||||
|
Следующий код демонстрирует конфигурационный массив,
|
||||||
|
который может использоваться для настройки приложения и регистрации компонентов "db", "cache" и "search" :
|
||||||
|
|
||||||
|
```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;
|
||||||
|
},
|
||||||
|
],
|
||||||
|
];
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user