Класс yii\di\Container
| Наследование | yii\di\Container » yii\base\Component » yii\base\Object |
|---|---|
| Реализует | yii\base\Configurable |
| Доступно с версии | 2.0 |
| Исходный код | https://github.com/yiisoft/yii2/blob/master/framework/di/Container.php |
Container реализует контейнер ввода зависимостей.
Контейнер ввода зависимостей (DI) — это объект, который знает, как создавать и настраивать объекты и все их зависимые объекты. Для получения дополнительной информации о DI, обратитесь к статье Мартина Фаулера.
Container поддерживает ввод зависимостей как через конструктор, так и через свойства.
Для использования Container, сначала необходимо настроить зависимости класса, вызвав set(). Затем вызывается get() для создания нового объекта класса. Container автоматически создаст зависимые объекты, введет их в создаваемый объект, настроит и, наконец, вернет новый созданный объект.
По умолчанию, Yii::$container ссылается на экземпляр Container, который используется Yii::createObject() для создания новых экземпляров объектов. Вы можете использовать этот метод для замены оператора new при создании нового объекта, что дает вам преимущество автоматического разрешения зависимостей и настройки свойств по умолчанию.
Ниже приведен пример использования Container:
namespace app\models;
use yii\base\Object;
use yii\db\Connection;
use yii\di\Container;
interface UserFinderInterface
{
function findUser();
}
class UserFinder extends Object implements UserFinderInterface
{
public $db;
public function __construct(Connection $db, $config = [])
{
$this->db = $db;
parent::__construct($config);
}
public function findUser()
{
}
}
class UserLister extends Object
{
public $finder;
public function __construct(UserFinderInterface $finder, $config = [])
{
$this->finder = $finder;
parent::__construct($config);
}
}
$container = new Container;
$container->set('yii\db\Connection', [
'dsn' => '...',
]);
$container->set('app\models\UserFinderInterface', [
'class' => 'app\models\UserFinder',
]);
$container->set('userLister', 'app\models\UserLister');
$lister = $container->get('userLister');
// which is equivalent to:
$db = new \yii\db\Connection(['dsn' => '...']);
$finder = new UserFinder($db);
$lister = new UserLister($finder);
Для получения дополнительной информации и сведений об использовании Container, см. статью руководства о контейнерах di.
Открытые свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| $behaviors | yii\base\Behavior[] | Список присоединенных к этому компоненту поведений | yii\base\Component |
| $definitions | массив | Список определений объектов или загруженных общих объектов (тип или идентификатор => определение или экземпляр). | yii\di\Container |
| $singleton | строка | Имя класса, имя интерфейса или псевдоним | yii\di\Container |
| $singletons | массив | Массив определений синглтонов. | yii\di\Container |
Открытые методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | yii\base\Component |
| __clone() | Этот метод вызывается после создания объекта путём клонирования существующего. | yii\base\Component |
| __construct() | Конструктор. | yii\base\Object |
| __get() | Возвращает значение свойства компонента. | yii\base\Component |
| __isset() | Проверяет, установлено ли свойство, т. е. определено и не равно null. | yii\base\Component |
| __set() | Устанавливает значение свойства компонента. | yii\base\Component |
| __unset() | Устанавливает свойство компонента в значение null. | yii\base\Component |
| attachBehavior() | Присоединяет поведение к этому компоненту. | yii\base\Component |
| attachBehaviors() | Присоединяет список поведений к компоненту. | yii\base\Component |
| behaviors() | Возвращает список поведений, по которым должен действовать этот компонент. | yii\base\Component |
| canGetProperty() | Возвращает значение, указывающее, можно ли читать свойство. | yii\base\Component |
| canSetProperty() | Возвращает значение, указывающее, можно ли установить свойство. | yii\base\Component |
| className() | Возвращает полное имя этого класса. | yii\base\Object |
| clear() | Удаляет определение для указанного имени. | yii\di\Container |
| detachBehavior() | Отсоединяет поведение от компонента. | yii\base\Component |
| detachBehaviors() | Отсоединяет все поведения от компонента. | yii\base\Component |
| ensureBehaviors() | Убеждается, что поведения, объявленные в behaviors(), присоединены к этому компоненту. | yii\base\Component |
| get() | Возвращает экземпляр запрошенного класса. | yii\di\Container |
| getBehavior() | Возвращает объект именованного поведения. | yii\base\Component |
| getBehaviors() | Возвращает все поведения, присоединённые к этому компоненту. | yii\base\Component |
| getDefinitions() | Возвращает список определений объектов или загруженных общих объектов. | yii\di\Container |
| has() | Возвращает значение, указывающее, содержит ли контейнер определение указанного имени. | yii\di\Container |
| hasEventHandlers() | Возвращает значение, указывающее, есть ли обработчик, прикреплённый к указанному событию. | yii\base\Component |
| hasMethod() | Возвращает значение, указывающее, определён ли метод. | yii\base\Component |
| hasProperty() | Возвращает значение, указывающее, определено ли свойство для этого компонента. | yii\base\Component |
| hasSingleton() | Возвращает значение, указывающее, соответствует ли данное имя зарегистрированному синглетону. | yii\di\Container |
| init() | Инициализирует объект. | yii\base\Object |
| invoke() | Вызывает обратный вызов с разрешением зависимостей в параметрах. | yii\di\Container |
| off() | Отсоединяет существующий обработчик событий от этого компонента. | yii\base\Component |
| on() | Присоединяет обработчик событий к событию. | yii\base\Component |
| resolveCallableDependencies() | Разрешает зависимости для функции. | yii\di\Container |
| set() | Регистрирует определение класса в этом контейнере. | yii\di\Container |
| setDefinitions() | Регистрирует определения классов в этом контейнере. | yii\di\Container |
| setSingleton() | Регистрирует определение класса в этом контейнере и помечает класс как синглетон. | yii\di\Container |
| setSingletons() | Регистрирует определения классов как синглетоны в этом контейнере, вызывая setSingleton() | yii\di\Container |
| trigger() | Вызывает событие. | yii\base\Component |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| build() | Создаёт экземпляр указанного класса. | yii\di\Container |
| getDependencies() | Возвращает зависимости указанного класса. | yii\di\Container |
| mergeParams() | Объединяет параметры конструктора, указанные пользователем, с параметрами, зарегистрированными с помощью set(). | yii\di\Container |
| normalizeDefinition() | Нормализует определение класса. | yii\di\Container |
| resolveDependencies() | Разрешает зависимости, заменяя их фактическими экземплярами объектов. | yii\di\Container |
Подробности свойств
$definitions публичное свойство
Список определений объектов или загруженных общих объектов (тип или ID => определение или экземпляр).
public array getDefinitions ( )
public void setDefinitions ( array $definitions )
$singleton публичное свойство только для записи
Имя класса, имя интерфейса или псевдоним.
public $this setSingleton ( $class, $definition = [], array $params = [] )
$singletons публичное свойство только для записи
Массив определений синглетонов. Смотрите setDefinitions() для допустимых форматов массива.
public void setSingletons ( array $singletons )
Подробности методов
build() защищённый метод
Создаёт экземпляр указанного класса.
Этот метод разрешит зависимости указанного класса, создаст их экземпляры и введёт их в новый экземпляр указанного класса.
| защищённый объект build ( $class, $params, $config ) | ||
|---|---|---|
| $class | строка |
Имя класса |
| $params | массив |
Параметры конструктора |
| $config | массив |
Конфигурации, которые должны быть применены к новому экземпляру |
| return | объект |
Новый созданный экземпляр указанного класса |
| throws | yii\di\NotInstantiableException |
Если разрешено абстрактный класс или интерфейс (с версии 2.0.9) |
clear() публичный метод
Удаляет определение для указанного имени.
| публичный void clear ( $class ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или имя псевдонима |
get() публичный метод
Возвращает экземпляр запрошенного класса.
Вы можете предоставить параметры конструктора ($params) и конфигурации объекта ($config), которые будут использоваться во время создания экземпляра.
Если класс реализует yii\base\Configurable, параметр $config будет передан в качестве последнего параметра конструктору класса; в противном случае конфигурация будет применена *после* создания объекта.
Обратите внимание, что если класс объявлен как синглтон, вызвав setSingleton(), каждый раз, когда вызывается этот метод, будет возвращён один и тот же экземпляр класса. В этом случае параметры конструктора и конфигурации объекта будут использованы только в том случае, если класс создаётся первый раз.
| публичный объект get ( $class, $params = [], $config = [] ) | ||
|---|---|---|
| $class | строка |
Имя класса или псевдоним (например, |
| $params | массив |
Список значений параметров конструктора. Параметры должны быть предоставлены в порядке их появления в объявлении конструктора. Если вы хотите пропустить некоторые параметры, вы должны индексировать оставшиеся целыми числами, которые представляют их позиции в списке параметров конструктора. |
| $config | массив |
Список пар имя-значение, которые будут использованы для инициализации свойств объекта. |
| return | объект |
Экземпляр запрошенного класса. |
| throws | yii\base\InvalidConfigException |
если класс не может быть распознан или соответствует неверному определению |
| throws | yii\di\NotInstantiableException |
Если разрешено абстрактный класс или интерфейс (с версии 2.0.9) |
getDefinitions() публичный метод
Возвращает список определений объектов или загруженных общих объектов.
| публичный массив getDefinitions ( ) | ||
|---|---|---|
| return | массив |
Список определений объектов или загруженных общих объектов (тип или идентификатор => определение или экземпляр). |
getDependencies() защищённый метод
Возвращает зависимости указанного класса.
| защищённый массив getDependencies ( $class ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или имя псевдонима |
| return | массив |
Зависимости указанного класса. |
has() публичный метод
Возвращает значение, указывающее, содержит ли контейнер определение указанного имени.
См. также set().
| публичный логический тип has ( $class ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или имя псевдонима |
| return | логический тип |
Является ли контейнер определением указанного имени. |
hasSingleton() публичный метод
Возвращает значение, указывающее, соответствует ли данное имя зарегистрированному синглтону.
| публичный логический тип hasSingleton ( $class, $checkInstance = false ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или имя псевдонима |
| $checkInstance | логический тип |
Нужно ли проверять, был ли синглтон создан. |
| return | логический тип |
Соответствует ли данное имя зарегистрированному синглтону. Если |
invoke() публичный метод (доступен с версии 2.0.7)
Вызов обратного вызова с разрешением зависимостей в параметрах.
Этот метод позволяет вызывать обратный вызов и разрешать именованные параметры с помощью типа как объекты контейнера. Он также позволяет вызывать функции с использованием именованных параметров.
Например, следующий обратный вызов может быть вызван с помощью контейнера для разрешения зависимости форматирования:
$formatString = function($string, \yii\i18n\Formatter $formatter) {
// ...
}
Yii::$container->invoke($formatString, ['string' => 'Hello World!']);
Это передаст строку 'Hello World!' в качестве первого параметра и экземпляр форматирования, созданный контейнером DI, как второй параметр вызываемому объекту.
| публичный смешанный invoke ( вызываемый объект $callback, $params = [] ) | ||
|---|---|---|
| $callback | вызываемый объект |
Вызываемый объект. |
| $params | массив |
Массив параметров для функции. Это может быть либо список параметров, либо ассоциативный массив, представляющий именованные параметры функции. |
| return | смешанный |
Возвращаемое значение обратного вызова. |
| throws | yii\base\InvalidConfigException |
если зависимость не может быть разрешена или если зависимость не может быть удовлетворена. |
| throws | yii\di\NotInstantiableException |
Если разрешено абстрактный класс или интерфейс (с версии 2.0.9) |
mergeParams() защищённый метод
Объединяет параметры конструктора, заданные пользователем, с зарегистрированными через set().
| защищённый массив mergeParams ( $class, $params ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или имя псевдонима |
| $params | массив |
Параметры конструктора |
| return | массив |
Объединённые параметры |
normalizeDefinition() защищённый метод
Нормализует определение класса.
| защищённый массив normalizeDefinition ( $class, $definition ) | ||
|---|---|---|
| $class | строка |
Имя класса |
| $definition | строка|массив|вызываемый объект |
Определение класса |
| return | массив |
Нормализованное определение класса |
| throws | yii\base\InvalidConfigException |
если определение недействительно. |
resolveCallableDependencies() публичный метод (доступен с версии 2.0.7)
Разрешение зависимостей для функции.
Этот метод можно использовать для реализации функциональности, аналогичной предоставляемой методом invoke() в других компонентах.
| public массив resolveCallableDependencies ( вызываемый объект $callback, $params = [] ) | ||
|---|---|---|
| $callback | вызываемый объект |
Вызываемый объект. |
| $params | массив |
Массив параметров для функции, может быть числовым или ассоциативным. |
| возвращаемое значение | массив |
Разрешенные зависимости. |
| бросает исключение | yii\base\InvalidConfigException |
если зависимость не может быть разрешена или если зависимость не может быть удовлетворена. |
| бросает исключение | yii\di\NotInstantiableException |
Если разрешено абстрактный класс или интерфейс (с версии 2.0.9) |
resolveDependencies() защищённый метод
Разрешает зависимости, заменяя их фактическими экземплярами объектов.
| защищённый массив resolveDependencies ( $dependencies, $reflection = null ) | ||
|---|---|---|
| $dependencies | массив |
Зависимости |
| $reflection | ReflectionClass |
Рефлексия класса, связанная с зависимостями |
| возвращаемое значение | массив |
Разрешенные зависимости |
| бросает исключение | yii\base\InvalidConfigException |
если зависимость не может быть разрешена или если зависимость не может быть удовлетворена. |
set() публичный метод
Регистрирует определение класса в этом контейнере.
Например,
// register a class name as is. This can be skipped.
$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');
// register an alias name. You can use $container->get('foo')
// to create an instance of Connection
$container->set('foo', 'yii\db\Connection');
// register a class with configuration. The configuration
// will be applied when the class is instantiated by get()
$container->set('yii\db\Connection', [
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
// register an alias name with class configuration
// In this case, a "class" element is required to specify the class
$container->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
// register a PHP callable
// The callable will be executed when $container->get('db') is called
$container->set('db', function ($container, $params, $config) {
return new \yii\db\Connection($config);
});
Если определение класса с тем же именем уже существует, оно будет перезаписано новым. Вы можете использовать has(), чтобы проверить, существует ли определение класса.
| public $this set ( $class, $definition = [], массив $params = [] ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или псевдоним |
| $definition | смешанный тип |
Определение, связанное с
|
| $params | массив |
Список параметров конструктора. Параметры будут переданы в конструктор класса при вызове get(). |
| возвращаемое значение | $this |
Сам контейнер |
setDefinitions() публичный метод (доступен с версии 2.0.11)
Регистрирует определения классов в этом контейнере.
См. также set(), чтобы узнать больше о возможных значениях определений.
| public void setDefinitions ( массив $definitions ) | ||
|---|---|---|
| $definitions | массив |
Массив определений. Есть два допустимых формата массива. Первый формат:
Пример: 'yii\web\Request' => 'app\components\Request',
'yii\web\Response' => [
'class' => 'app\components\Response',
'format' => 'json'
],
'foo\Bar' => function () {
$qux = new Qux;
$foo = new Foo($qux);
return new Bar($foo);
}
]); Второй формат:
Пример: 'foo\Bar' => [
['class' => 'app\Bar'],
[Instance::of('baz')]
]
]); |
setSingleton() публичный метод
Регистрирует определение класса в этом контейнере и помечает класс как синглтон.
Этот метод похож на set(), за исключением того, что классы, зарегистрированные с помощью этого метода, будут иметь только один экземпляр. Каждый раз, когда вызывается get(), будет возвращён один и тот же экземпляр указанного класса.
См. также set().
| public $this setSingleton ( $class, $definition = [], массив $params = [] ) | ||
|---|---|---|
| $class | строка |
Имя класса, имя интерфейса или псевдоним |
| $definition | смешанный тип |
Определение, связанное с |
| $params | массив |
Список параметров конструктора. Параметры будут переданы в конструктор класса при вызове get(). |
| возвращаемое значение | $this |
Сам контейнер |
setSingletons() публичный метод (доступен с версии 2.0.11)
Регистрирует определения классов как синглтоны в этом контейнере, вызывая setSingleton()
См. также:
- setDefinitions() для допустимых форматов параметра $singletons.
- setSingleton() для получения дополнительной информации о возможных значениях определений.
| public void setSingletons ( массив $singletons ) | ||
|---|---|---|
| $singletons | массив |
Массив определений синглтонов. См. setDefinitions() для допустимых форматов массива. |
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/yii-di-container.html