Commit e0963665 by quot;brussens

update

update translate
parent 8864e0cc
...@@ -14,7 +14,7 @@ Yii обеспечивает функционал контейнера внед ...@@ -14,7 +14,7 @@ Yii обеспечивает функционал контейнера внед
* Внедрение зависимости через конструктор. * Внедрение зависимости через конструктор.
* Внедрение зависимости через сеттер и свойство. * Внедрение зависимости через сеттер и свойство.
* Внедрение зависимости через callback. * Внедрение зависимости через PHP callback.
### Внедрение зависимости через конструктор <a name="constructor-injection"></a> ### Внедрение зависимости через конструктор <a name="constructor-injection"></a>
...@@ -41,9 +41,9 @@ $foo = new Foo($bar); ...@@ -41,9 +41,9 @@ $foo = new Foo($bar);
### Внедрение зависимости через сеттер и свойство <a name="setter-and-property-injection"></a> ### Внедрение зависимости через сеттер и свойство <a name="setter-and-property-injection"></a>
Внедрение зависимости через сеттер и свойство поддерживается через [конфигурации](concept-configurations.md). Внедрение зависимости через сеттер и свойство поддерживается через [конфигурации](concept-configurations.md).
When registering a dependency or when creating a new object, you can provide a configuration which При регистрации зависимости или при создании нового объекта, вы можете предоставить конфигурацию, которая
will be used by the container to inject the dependencies through the corresponding setters or properties. будет использована контейнером для внедрения зависимостей через соответствующие сеттеры или свойства.
For example, Например,
```php ```php
use yii\base\Object; use yii\base\Object;
...@@ -72,11 +72,10 @@ $container->get('Foo', [], [ ...@@ -72,11 +72,10 @@ $container->get('Foo', [], [
``` ```
### PHP Callable Injection <a name="php-callable-injection"></a> ### Внедрение зависимости через PHP callback <a name="php-callable-injection"></a>
In this case, the container will use a registered PHP callable to build new instances of a class. В данном случае, контейнер будет использовать зарегистрированный PHP callback для создания новых экземпляров класса.
The callable is responsible to resolve the dependencies and inject them appropriately to the newly Callback отвечает за разрешения зависимостей и внедряет их в соответствии с вновь создаваемыми объектами. Например,
created objects. For example,
```php ```php
$container->set('Foo', function () { $container->set('Foo', function () {
...@@ -87,30 +86,29 @@ $foo = $container->get('Foo'); ...@@ -87,30 +86,29 @@ $foo = $container->get('Foo');
``` ```
Registering Dependencies <a name="registering-dependencies"></a> Регистрация зависимостей <a name="registering-dependencies"></a>
------------------------ ------------------------
You can use [[yii\di\Container::set()]] to register dependencies. The registration requires a dependency name Вы можете использовать [[yii\di\Container::set()]] для регистрации зависимостей. При регистрации требуется имя зависимости, а так же определение зависимости.
as well as a dependency definition. A dependency name can be a class name, an interface name, or an alias name; Именем звисимости может быть имя класса, интерфейса или алиас, так же определением зависимости может быть имя класса, конфигурационным массивом, или PHP calback'ом.
and a dependency definition can be a class name, a configuration array, or a PHP callable.
```php ```php
$container = new \yii\di\Container; $container = new \yii\di\Container;
// register a class name as is. This can be skipped. // регистрация имени класса, как есть. это может быть пропущено.
$container->set('yii\db\Connection'); $container->set('yii\db\Connection');
// register an interface // регистраци интерфейса
// When a class depends on the interface, the corresponding class // Когда класс зависит от интерфейса, соответствующий класс
// will be instantiated as the dependent object // будет использован в качестве зависимости объекта
$container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer'); $container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer');
// register an alias name. You can use $container->get('foo') // регистрация алиаса. Вы можете использовать $container->get('foo')
// to create an instance of Connection // для создания экземпляра Connection
$container->set('foo', 'yii\db\Connection'); $container->set('foo', 'yii\db\Connection');
// register a class with configuration. The configuration // Регистрация класса с конфигурацией. Конфигурация
// will be applied when the class is instantiated by get() // будет применена при создании экземпляра класса через get()
$container->set('yii\db\Connection', [ $container->set('yii\db\Connection', [
'dsn' => 'mysql:host=127.0.0.1;dbname=demo', 'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root', 'username' => 'root',
...@@ -118,8 +116,8 @@ $container->set('yii\db\Connection', [ ...@@ -118,8 +116,8 @@ $container->set('yii\db\Connection', [
'charset' => 'utf8', 'charset' => 'utf8',
]); ]);
// register an alias name with class configuration // регистрация алиаса с конфигурацией класса
// In this case, a "class" element is required to specify the class // В данном случае, параметр "class" требуется для указания класса
$container->set('db', [ $container->set('db', [
'class' => 'yii\db\Connection', 'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo', 'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
...@@ -128,19 +126,18 @@ $container->set('db', [ ...@@ -128,19 +126,18 @@ $container->set('db', [
'charset' => 'utf8', 'charset' => 'utf8',
]); ]);
// register a PHP callable // регистрация PHP callback'a
// The callable will be executed each time when $container->get('db') is called // Callback будет выполняться каждый раз при вызове $container->get('db')
$container->set('db', function ($container, $params, $config) { $container->set('db', function ($container, $params, $config) {
return new \yii\db\Connection($config); return new \yii\db\Connection($config);
}); });
// register a component instance // регистрация экземпляра компонента
// $container->get('pageCache') will return the same instance each time it is called // $container->get('pageCache') вернёт тот же экземпляр при каждом вызове
$container->set('pageCache', new FileCache); $container->set('pageCache', new FileCache);
``` ```
> Tip: If a dependency name is the same as the corresponding dependency definition, you do not > Подсказка: Если имя зависимости такое же, как и определение соответствующей зависимости, то вы не нуждаетесь в её повторной регистрации в контейнер внедрения зависимостей.
need to register it with the DI container.
A dependency registered via `set()` will generate an instance each time the dependency is needed. A dependency registered via `set()` will generate an instance each time the dependency is needed.
You can use [[yii\di\Container::setSingleton()]] to register a dependency that only generates You can use [[yii\di\Container::setSingleton()]] to register a dependency that only generates
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment