Spec-Zone.ru › Yii 2.0

Класс 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 строка

Имя класса или псевдоним (например, foo), который был ранее зарегистрирован с помощью set() или setSingleton().

$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 логический тип

Соответствует ли данное имя зарегистрированному синглтону. Если $checkInstance равно true, метод должен вернуть значение, указывающее, был ли синглтон создан.

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 смешанный тип

Определение, связанное с $class. Оно может быть одним из следующих:

  • вызываемый объект PHP: Вызываемый объект будет выполнен при вызове get(). Подпись вызываемого объекта должна быть function ($container, $params, $config), где $params обозначает список параметров конструктора, $config конфигурацию объекта, а $container объект контейнера. Возвращаемое значение вызываемого объекта будет возвращено get() как запрашиваемый экземпляр объекта.
  • конфигурационный массив: массив содержит пары имя-значение, которые будут использоваться для инициализации значений свойств вновь созданного объекта при вызове get(). Элемент class обозначает класс объекта, который должен быть создан. Если class не указан, $class будет использоваться как имя класса.
  • строка: имя класса, имя интерфейса или псевдоним.
$params массив

Список параметров конструктора. Параметры будут переданы в конструктор класса при вызове get().

возвращаемое значение $this

Сам контейнер

setDefinitions() публичный метод (доступен с версии 2.0.11)

Регистрирует определения классов в этом контейнере.

См. также set(), чтобы узнать больше о возможных значениях определений.

public void setDefinitions ( массив $definitions )
$definitions массив

Массив определений. Есть два допустимых формата массива. Первый формат:

  • ключ: имя класса, имя интерфейса или псевдоним. Ключ будет передан методу set() в качестве первого аргумента $class.
  • значение: определение, связанное с $class. Возможные значения описаны в документации set() для параметра $definition. Будет передан методу set() в качестве второго аргумента $definition.

Пример: `php $container->setDefinitions([

'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);
}

]); `

Второй формат:

  • ключ: имя класса, имя интерфейса или псевдоним. Ключ будет передан методу set() в качестве первого аргумента $class.
  • значение: массив из двух элементов. Первый элемент будет передан методу set() в качестве второго аргумента $definition, второй — в качестве $params.

Пример: `php $container->setDefinitions([

'foo\Bar' => [
     ['class' => 'app\Bar'],
     [Instance::of('baz')]
 ]

]); `

setSingleton() публичный метод

Регистрирует определение класса в этом контейнере и помечает класс как синглтон.

Этот метод похож на set(), за исключением того, что классы, зарегистрированные с помощью этого метода, будут иметь только один экземпляр. Каждый раз, когда вызывается get(), будет возвращён один и тот же экземпляр указанного класса.

См. также set().

public $this setSingleton ( $class, $definition = [], массив $params = [] )
$class строка

Имя класса, имя интерфейса или псевдоним

$definition смешанный тип

Определение, связанное с $class. См. set() для получения дополнительной информации.

$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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API