1 フォロワー

クラス yii\di\Container

継承yii\di\Container » yii\base\Component » yii\base\BaseObject
実装yii\base\Configurable
利用可能なバージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/di/Container.php

Container は 依存性注入 コンテナを実装します。

依存性注入 (DI) コンテナは、オブジェクトと、それらが依存するすべてのオブジェクトをインスタンス化および構成する方法を知っているオブジェクトです。DI について詳しくは、Martin Fowler の記事を参照してください。

Container は、コンストラクターインジェクションとプロパティインジェクションをサポートしています。

Container を使用するには、最初に set() を呼び出してクラスの依存関係を設定する必要があります。次に、get() を呼び出して新しいクラスオブジェクトを作成します。Container は、依存オブジェクトを自動的にインスタンス化し、作成中のオブジェクトに注入し、構成してから、最後に新しく作成したオブジェクトを返します。

デフォルトでは、Yii::$container は、Yii::createObject() が新しいオブジェクトインスタンスを作成するために使用する Container インスタンスを参照します。このメソッドを使用して、新しいオブジェクトを作成する際に new 演算子を置き換えることができます。これにより、自動依存関係解決とデフォルトのプロパティ構成の利点が得られます。

以下は、Container の使用例です。

namespace app\models;

use yii\base\BaseObject;
use yii\db\Connection;
use yii\di\Container;

interface UserFinderInterface
{
    function findUser();
}

class UserFinder extends BaseObject implements UserFinderInterface
{
    public $db;

    public function __construct(Connection $db, $config = [])
    {
        $this->db = $db;
        parent::__construct($config);
    }

    public function findUser()
    {
    }
}

class UserLister extends BaseObject
{
    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-containers に関するガイド記事をご覧ください。

パブリックプロパティ

継承されたプロパティを非表示

プロパティ タイプ 説明 定義元
$behaviors yii\base\Behavior[] このコンポーネントにアタッチされたビヘイビアのリスト。 yii\base\Component
$definitions 配列 オブジェクト定義またはロードされた共有オブジェクト (タイプまたは ID => 定義またはインスタンス) のリスト。 yii\di\Container
$resolveArrays ブール値 配列の依存関係で要素の解決を試みるかどうか。 yii\di\Container
$singleton 文字列 クラス名、インターフェース名、またはエイリアス名 yii\di\Container
$singletons 配列 シングルトン定義の配列。 yii\di\Container

パブリックメソッド

継承されたメソッドを非表示

メソッド 説明 定義元
__call() クラスメソッドではない名前付きメソッドを呼び出します。 yii\base\Component
__clone() このメソッドは、既存のオブジェクトを複製してオブジェクトが作成された後に呼び出されます。 yii\base\Component
__construct() コンストラクタ。 yii\base\BaseObject
__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\BaseObject
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\BaseObject
invoke() パラメーターの依存関係を解決してコールバックを呼び出します。 yii\di\Container
off() このコンポーネントから既存のイベントハンドラーをデタッチします。 yii\base\Component
on() イベントにイベントハンドラーをアタッチします。 yii\base\Component
resolveCallableDependencies() 関数の依存関係を解決します。 yii\di\Container
set() このコンテナにクラス定義を登録します。 yii\di\Container
setDefinitions() このコンテナ内にクラス定義を登録します。 yii\di\Container
setResolveArrays() 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 $definitions null
$resolveArrays public プロパティ

配列の依存関係で要素の解決を試みるかどうか。

public boolean $resolveArrays null
$singleton public 書き込み専用 プロパティ

クラス名、インターフェース名、またはエイリアス名

public $this setSingleton ( $class, $definition = [], array $params = [] )
$singletons public 書き込み専用 プロパティ (バージョン 2.0.11 から利用可能)

シングルトン定義の配列。配列の許容形式についてはsetDefinitions()を参照してください。

public void setSingletons ( array $singletons )

メソッド詳細

継承されたメソッドを非表示

__call() public メソッド

定義元: yii\base\Component::__call()

クラスメソッドではない名前付きメソッドを呼び出します。

このメソッドは、付随するビヘイビアが指定された名前のメソッドを持っているかどうかを確認し、もしあれば実行します。

不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

public mixed __call ( $name, $params )
$name 文字列

メソッド名

$params 配列

メソッドのパラメータ

return mixed

メソッドの戻り値

throws yii\base\UnknownMethodException

不明なメソッドを呼び出した場合

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() public メソッド

定義元: yii\base\Component::__clone()

このメソッドは、既存のオブジェクトを複製してオブジェクトが作成された後に呼び出されます。

古いオブジェクトにアタッチされているため、すべてのビヘイビアを削除します。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() public メソッド

定義元: yii\base\BaseObject::__construct()

コンストラクタ。

デフォルトの実装では次の2つの処理を行います。

  • 与えられた設定$configでオブジェクトを初期化します。
  • init()を呼び出します。

このメソッドが子クラスでオーバーライドされている場合、推奨されるのは

  • コンストラクタの最後のパラメータが、ここでの$configのような設定配列であることです。
  • コンストラクタの最後に親の実装を呼び出すことです。
public void __construct ( $config = [] )
$config 配列

オブジェクトのプロパティを初期化するために使用される名前と値のペア

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public メソッド

定義元: yii\base\Component::__get()

コンポーネントプロパティの値を返します。

このメソッドは以下の順序で確認し、それに応じて動作します。

  • ゲッターによって定義されたプロパティ:ゲッターの結果を返します。
  • ビヘイビアのプロパティ:ビヘイビアのプロパティ値を返します。

$value = $component->property;の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

また、__set()も参照してください。

public mixed __get ( $name )
$name 文字列

プロパティ名

return mixed

プロパティの値またはビヘイビアのプロパティの値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws yii\base\InvalidCallException

プロパティが書き込み専用の場合。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public メソッド

定義元: yii\base\Component::__isset()

プロパティが設定されているか、つまり定義されており、null でないかを確認します。

このメソッドは以下の順序で確認し、それに応じて動作します。

  • セッターによって定義されたプロパティ:プロパティが設定されているかどうかを返します。
  • ビヘイビアのプロパティ:プロパティが設定されているかどうかを返します。
  • 存在しないプロパティの場合はfalseを返します。

isset($component->property)を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

また、https://www.php.net/manual/en/function.isset.phpも参照してください。

public boolean __isset ( $name )
$name 文字列

プロパティ名またはイベント名

return ブール値

指定されたプロパティが設定されているかどうか

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() public メソッド

定義元: yii\base\Component::__set()

コンポーネントプロパティの値を設定します。

このメソッドは以下の順序で確認し、それに応じて動作します。

  • セッターによって定義されたプロパティ:プロパティ値を設定します。
  • 「on xyz」の形式のイベント:「xyz」イベントにハンドラをアタッチします。
  • 「as xyz」の形式のビヘイビア:「xyz」という名前のビヘイビアをアタッチします。
  • ビヘイビアのプロパティ:ビヘイビアのプロパティ値を設定します。

$component->property = $value;を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

また、__get()も参照してください。

public void __set ( $name, $value )
$name 文字列

プロパティ名またはイベント名

$value mixed

プロパティの値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws yii\base\InvalidCallException

プロパティが読み取り専用の場合。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() public メソッド

定義元: yii\base\Component::__unset()

コンポーネントプロパティを null に設定します。

このメソッドは以下の順序で確認し、それに応じて動作します。

  • セッターによって定義されたプロパティ:プロパティ値をnullに設定します。
  • ビヘイビアのプロパティ:プロパティ値をnullに設定します。

unset($component->property)を実行したときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

また、https://www.php.net/manual/en/function.unset.phpも参照してください。

public void __unset ( $name )
$name 文字列

プロパティ名

throws yii\base\InvalidCallException

プロパティが読み取り専用の場合。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
attachBehavior() public メソッド

定義場所: yii\base\Component::attachBehavior()

このコンポーネントにビヘイビアをアタッチします。

このメソッドは、与えられた設定に基づいてビヘイビアオブジェクトを作成します。その後、yii\base\Behavior::attach()メソッドを呼び出すことで、ビヘイビアオブジェクトがこのコンポーネントにアタッチされます。

detachBehavior() も参照してください。

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name 文字列

ビヘイビアの名前。

$behavior string|array|yii\base\Behavior

ビヘイビアの設定。次のいずれかになります。

  • yii\base\Behaviorオブジェクト
  • ビヘイビアクラスを指定する文字列
  • Yii::createObject()に渡されてビヘイビアオブジェクトを作成するオブジェクト設定配列。
return yii\base\Behavior

ビヘイビアオブジェクト

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public メソッド

定義場所: yii\base\Component::attachBehaviors()

コンポーネントにビヘイビアのリストをアタッチします。

各ビヘイビアはその名前でインデックスされ、yii\base\Behaviorオブジェクト、ビヘイビアクラスを指定する文字列、またはビヘイビアを作成するための設定配列である必要があります。

attachBehavior()も参照してください。

public void attachBehaviors ( $behaviors )
$behaviors 配列

コンポーネントにアタッチされるビヘイビアのリスト

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() public メソッド

定義場所: yii\base\Component::behaviors()

このコンポーネントが動作するべきビヘイビアのリストを返します。

子クラスは、このメソッドをオーバーライドして、それらがビヘイビアとして振る舞うようにしたいビヘイビアを指定できます。

このメソッドの戻り値は、ビヘイビア名でインデックスされたビヘイビアオブジェクトまたは設定の配列である必要があります。ビヘイビアの設定は、ビヘイビアクラスを指定する文字列か、次の構造の配列のいずれかになります。

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

ビヘイビアクラスはyii\base\Behaviorを拡張する必要があることに注意してください。ビヘイビアは、名前付きまたは匿名でアタッチできます。名前が配列のキーとして使用されている場合、この名前を使用して、後でgetBehavior()を使用して取得するか、detachBehavior()を使用してデタッチすることができます。匿名ビヘイビアは、取得またはデタッチすることはできません。

このメソッドで宣言されたビヘイビアは、(要求に応じて)コンポーネントに自動的にアタッチされます。

public array behaviors ( )
return 配列

ビヘイビア設定。

                public function behaviors()
{
    return [];
}

            
build() protected メソッド

指定されたクラスのインスタンスを作成します。

このメソッドは、指定されたクラスの依存関係を解決し、それらをインスタンス化し、指定されたクラスの新しいインスタンスにそれらを注入します。

protected object build ( $class, $params, $config )
$class 文字列

クラス名

$params 配列

コンストラクタパラメータ

$config 配列

新しいインスタンスに適用される設定

return object

指定されたクラスの新たに作成されたインスタンス

throws yii\di\NotInstantiableException

(2.0.9以降)抽象クラスまたはインターフェースに解決された場合

                protected function build($class, $params, $config)
{
    /* @var $reflection ReflectionClass */
    list($reflection, $dependencies) = $this->getDependencies($class);
    $addDependencies = [];
    if (isset($config['__construct()'])) {
        $addDependencies = $config['__construct()'];
        unset($config['__construct()']);
    }
    foreach ($params as $index => $param) {
        $addDependencies[$index] = $param;
    }
    $this->validateDependencies($addDependencies);
    if ($addDependencies && is_int(key($addDependencies))) {
        $dependencies = array_values($dependencies);
        $dependencies = $this->mergeDependencies($dependencies, $addDependencies);
    } else {
        $dependencies = $this->mergeDependencies($dependencies, $addDependencies);
        $dependencies = array_values($dependencies);
    }
    $dependencies = $this->resolveDependencies($dependencies, $reflection);
    if (!$reflection->isInstantiable()) {
        throw new NotInstantiableException($reflection->name);
    }
    if (empty($config)) {
        return $reflection->newInstanceArgs($dependencies);
    }
    $config = $this->resolveDependencies($config);
    if (!empty($dependencies) && $reflection->implementsInterface('yii\base\Configurable')) {
        // set $config as the last parameter (existing one will be overwritten)
        $dependencies[count($dependencies) - 1] = $config;
        return $reflection->newInstanceArgs($dependencies);
    }
    $object = $reflection->newInstanceArgs($dependencies);
    foreach ($config as $name => $value) {
        $object->$name = $value;
    }
    return $object;
}

            
canGetProperty() public メソッド

定義場所: yii\base\Component::canGetProperty()

プロパティを読み取れるかどうかを示す値を返します。

プロパティは、以下の場合に読み取ることができます。

  • クラスに指定された名前に関連付けられたgetterメソッドがある場合 (この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスに指定された名前のメンバ変数がある場合 ($checkVarsがtrueの場合)。
  • アタッチされたビヘイビアに指定された名前の読み取り可能なプロパティがある場合 ($checkBehaviorsがtrueの場合)。

canSetProperty()も参照してください。

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 文字列

プロパティ名

$checkVars ブール値

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors ブール値

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return ブール値

プロパティを読み取ることができるかどうか

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public メソッド

定義場所: yii\base\Component::canSetProperty()

プロパティを設定できるかどうかを示す値を返します。

プロパティは、以下の場合に書き込むことができます。

  • クラスに指定された名前に関連付けられたsetterメソッドがある場合 (この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスに指定された名前のメンバ変数がある場合 ($checkVarsがtrueの場合)。
  • アタッチされたビヘイビアに指定された名前の書き込み可能なプロパティがある場合 ($checkBehaviorsがtrueの場合)。

canGetProperty()も参照してください。

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name 文字列

プロパティ名

$checkVars ブール値

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors ブール値

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return ブール値

プロパティに書き込むことができるかどうか

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() public static メソッド
2.0.14以降は非推奨です。PHP >= 5.5では、代わりに::classを使用してください。

定義場所: yii\base\BaseObject::className()

このクラスの完全修飾名を返します。

public static string className ( )
return 文字列

このクラスの完全修飾名。

                public static function className()
{
    return get_called_class();
}

            
clear() public メソッド

指定された名前の定義を削除します。

public void clear ( $class )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

                public function clear($class)
{
    unset($this->_definitions[$class], $this->_singletons[$class]);
}

            
detachBehavior() public メソッド

定義場所: yii\base\Component::detachBehavior()

コンポーネントからビヘイビアをデタッチします。

ビヘイビアのyii\base\Behavior::detach()メソッドが呼び出されます。

public yii\base\Behavior|null detachBehavior ( $name )
$name 文字列

ビヘイビアの名前。

return yii\base\Behavior|null

デタッチされたビヘイビア。ビヘイビアが存在しない場合はNull。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public メソッド

定義元: yii\base\Component::detachBehaviors()

コンポーネントからすべてのビヘイビアをデタッチします。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public メソッド

定義元: yii\base\Component::ensureBehaviors()

behaviors() で宣言されたビヘイビアがこのコンポーネントにアタッチされていることを確認します。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
get() public メソッド

要求されたクラスのインスタンスを返します。

インスタンスの生成中に使用されるコンストラクタパラメータ ($params) とオブジェクト構成 ($config) を提供できます。

クラスが yii\base\Configurable を実装している場合、$config パラメータはクラスのコンストラクタへの最後のパラメータとして渡されます。そうでない場合、構成はオブジェクトがインスタンス化されたに適用されます。

クラスが setSingleton() を呼び出すことによってシングルトンとして宣言されている場合、このメソッドが呼び出されるたびに、同じクラスのインスタンスが返されることに注意してください。この場合、コンストラクタパラメータとオブジェクト構成は、クラスが最初にインスタンス化された場合にのみ使用されます。

public object get ( $class, $params = [], $config = [] )
$class string|yii\di\Instance

クラスインスタンス、名前、または set() または setSingleton() を介して以前に登録されたエイリアス名(例:foo)。

$params 配列

コンストラクタのパラメータ値のリスト。以下の2つの定義のいずれかを使用してください。

  • 名前と値のペアとしてのパラメータ。例: ['posts' => PostRepository::class]
  • コンストラクタの宣言に表示される順序でのパラメータ。一部のパラメータをスキップする場合は、残りのパラメータをコンストラクタパラメータリストでの位置を表す整数でインデックス付けする必要があります。名前と位置でインデックス付けされた依存関係は、同じ配列内では許可されていません。
$config 配列

オブジェクトのプロパティを初期化するために使用される名前と値のペアのリスト。

return object

要求されたクラスのインスタンス。

throws yii\base\InvalidConfigException

クラスを認識できない場合、または無効な定義に対応する場合

throws yii\di\NotInstantiableException

(2.0.9以降)抽象クラスまたはインターフェースに解決された場合

                public function get($class, $params = [], $config = [])
{
    if ($class instanceof Instance) {
        $class = $class->id;
    }
    if (isset($this->_singletons[$class])) {
        // singleton
        return $this->_singletons[$class];
    } elseif (!isset($this->_definitions[$class])) {
        return $this->build($class, $params, $config);
    }
    $definition = $this->_definitions[$class];
    if (is_callable($definition, true)) {
        $params = $this->resolveDependencies($this->mergeParams($class, $params));
        $object = call_user_func($definition, $this, $params, $config);
    } elseif (is_array($definition)) {
        $concrete = $definition['class'];
        unset($definition['class']);
        $config = array_merge($definition, $config);
        $params = $this->mergeParams($class, $params);
        if ($concrete === $class) {
            $object = $this->build($class, $params, $config);
        } else {
            $object = $this->get($concrete, $params, $config);
        }
    } elseif (is_object($definition)) {
        return $this->_singletons[$class] = $definition;
    } else {
        throw new InvalidConfigException('Unexpected object definition type: ' . gettype($definition));
    }
    if (array_key_exists($class, $this->_singletons)) {
        // singleton
        $this->_singletons[$class] = $object;
    }
    return $object;
}

            
getBehavior() public メソッド

定義元: yii\base\Component::getBehavior()

名前付きビヘイビアオブジェクトを返します。

public yii\base\Behavior|null getBehavior ( $name )
$name 文字列

ビヘイビア名

return yii\base\Behavior|null

ビヘイビアオブジェクト。存在しない場合はnull

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public メソッド

定義元: yii\base\Component::getBehaviors()

このコンポーネントにアタッチされたすべてのビヘイビアを返します。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

このコンポーネントにアタッチされたビヘイビアのリスト

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getDefinitions() public メソッド

オブジェクト定義またはロードされた共有オブジェクトのリストを返します。

public array getDefinitions ( )
return 配列

オブジェクト定義またはロードされた共有オブジェクト (タイプまたは ID => 定義またはインスタンス) のリスト。

                public function getDefinitions()
{
    return $this->_definitions;
}

            
getDependencies() protected メソッド

指定されたクラスの依存関係を返します。

protected array getDependencies ( $class )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

return 配列

指定されたクラスの依存関係。

throws yii\di\NotInstantiableException

依存関係を解決できない場合、または依存関係を満たすことができない場合。

                protected function getDependencies($class)
{
    if (isset($this->_reflections[$class])) {
        return [$this->_reflections[$class], $this->_dependencies[$class]];
    }
    $dependencies = [];
    try {
        $reflection = new ReflectionClass($class);
    } catch (\ReflectionException $e) {
        throw new NotInstantiableException(
            $class,
            'Failed to instantiate component or class "' . $class . '".',
            0,
            $e
        );
    }
    $constructor = $reflection->getConstructor();
    if ($constructor !== null) {
        foreach ($constructor->getParameters() as $param) {
            if (PHP_VERSION_ID >= 50600 && $param->isVariadic()) {
                break;
            }
            if (PHP_VERSION_ID >= 80000) {
                $c = $param->getType();
                $isClass = false;
                if ($c instanceof ReflectionNamedType) {
                    $isClass = !$c->isBuiltin();
                }
            } else {
                try {
                    $c = $param->getClass();
                } catch (ReflectionException $e) {
                    if (!$this->isNulledParam($param)) {
                        $notInstantiableClass = null;
                        if (PHP_VERSION_ID >= 70000) {
                            $type = $param->getType();
                            if ($type instanceof ReflectionNamedType) {
                                $notInstantiableClass = $type->getName();
                            }
                        }
                        throw new NotInstantiableException(
                            $notInstantiableClass,
                            $notInstantiableClass === null ? 'Can not instantiate unknown class.' : null
                        );
                    } else {
                        $c = null;
                    }
                }
                $isClass = $c !== null;
            }
            $className = $isClass ? $c->getName() : null;
            if ($className !== null) {
                $dependencies[$param->getName()] = Instance::of($className, $this->isNulledParam($param));
            } else {
                $dependencies[$param->getName()] = $param->isDefaultValueAvailable()
                    ? $param->getDefaultValue()
                    : null;
            }
        }
    }
    $this->_reflections[$class] = $reflection;
    $this->_dependencies[$class] = $dependencies;
    return [$reflection, $dependencies];
}

            
has() public メソッド

コンテナに指定された名前の定義があるかどうかを示す値を返します。

set() も参照してください。

public boolean has ( $class )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

return ブール値

コンテナが指定された名前の定義を持っているかどうか。

                public function has($class)
{
    return isset($this->_definitions[$class]);
}

            
hasEventHandlers() public メソッド

定義元: yii\base\Component::hasEventHandlers()

名前付きイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。

public boolean hasEventHandlers ( $name )
$name 文字列

イベント名

return ブール値

イベントにアタッチされたハンドラがあるかどうか。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public メソッド

定義元: yii\base\Component::hasMethod()

メソッドが定義されているかどうかを示す値を返します。

メソッドは、以下の場合に定義されます。

  • クラスに指定された名前のメソッドがある
  • アタッチされたビヘイビアに、指定された名前のメソッドがある場合 ($checkBehaviors が true の場合)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name 文字列

プロパティ名

$checkBehaviors ブール値

ビヘイビアのメソッドをこのコンポーネントのメソッドとして扱うかどうか

return ブール値

メソッドが定義されているかどうか

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() public メソッド

定義元: yii\base\Component::hasProperty()

このコンポーネントにプロパティが定義されているかどうかを示す値を返します。

プロパティは以下の場合に定義されます。

  • クラスが、指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている場合(この場合、プロパティ名は大小文字を区別しません)。
  • クラスに指定された名前のメンバ変数がある場合 ($checkVarsがtrueの場合)。
  • アタッチされたビヘイビアが、指定された名前のプロパティを持っている場合($checkBehaviors が true の場合)。

参考

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name 文字列

プロパティ名

$checkVars ブール値

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors ブール値

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return ブール値

プロパティが定義されているかどうか

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
hasSingleton() public メソッド

指定された名前が登録済みのシングルトンに対応するかどうかを示す値を返します。

public boolean hasSingleton ( $class, $checkInstance false )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

$checkInstance ブール値

シングルトンがインスタンス化されているかどうかを確認するかどうか。

return ブール値

指定された名前が登録済みのシングルトンに対応するかどうか。$checkInstance が true の場合、このメソッドはシングルトンがインスタンス化されているかどうかを示す値を返す必要があります。

                public function hasSingleton($class, $checkInstance = false)
{
    return $checkInstance ? isset($this->_singletons[$class]) : array_key_exists($class, $this->_singletons);
}

            
init() public メソッド

定義元: yii\base\BaseObject::init()

オブジェクトを初期化します。

このメソッドは、オブジェクトが与えられた設定で初期化された後、コンストラクタの最後に呼び出されます。

public void init ( )

                public function init()
{
}

            
invoke() public メソッド (バージョン 2.0.7 から利用可能)

パラメーターの依存関係を解決してコールバックを呼び出します。

このメソッドを使用すると、コールバックを呼び出して、型ヒント付きのパラメータ名をコンテナのオブジェクトとして解決できます。さらに、名前付きパラメータを使用して関数を呼び出すことができます。

たとえば、次のコールバックは、フォーマッターの依存関係を解決するためにコンテナを使用して呼び出すことができます

$formatString = function($string, \yii\i18n\Formatter $formatter) {
   // ...
}
Yii::$container->invoke($formatString, ['string' => 'Hello World!']);

これにより、文字列 'Hello World!' が最初のパラメータとして渡され、DIコンテナによって作成されたフォーマッターのインスタンスが2番目のパラメータとして、呼び出し可能オブジェクトに渡されます。

public mixed invoke ( callable $callback, $params = [] )
$callback 呼び出し可能

呼び出すコールバック。

$params 配列

関数のパラメータの配列。これは、パラメータのリスト、または名前付き関数パラメータを表す連想配列のいずれかになります。

return mixed

コールバックの戻り値。

throws yii\base\InvalidConfigException

依存関係を解決できない場合、または依存関係を満たすことができない場合。

throws yii\di\NotInstantiableException

(2.0.9以降)抽象クラスまたはインターフェースに解決された場合

                public function invoke(callable $callback, $params = [])
{
    return call_user_func_array($callback, $this->resolveCallableDependencies($callback, $params));
}

            
mergeParams() protected メソッド

ユーザー指定のコンストラクターパラメーターを、set() を介して登録されたパラメーターとマージします。

protected array mergeParams ( $class, $params )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

$params 配列

コンストラクタパラメータ

return 配列

マージされたパラメータ

                protected function mergeParams($class, $params)
{
    if (empty($this->_params[$class])) {
        return $params;
    } elseif (empty($params)) {
        return $this->_params[$class];
    }
    $ps = $this->_params[$class];
    foreach ($params as $index => $value) {
        $ps[$index] = $value;
    }
    return $ps;
}

            
normalizeDefinition() protected メソッド

クラス定義を正規化します。

protected array normalizeDefinition ( $class, $definition )
$class 文字列

クラス名

$definition string|array|callable

クラス定義

return 配列

正規化されたクラス定義

throws yii\base\InvalidConfigException

定義が無効な場合。

                protected function normalizeDefinition($class, $definition)
{
    if (empty($definition)) {
        return ['class' => $class];
    } elseif (is_string($definition)) {
        return ['class' => $definition];
    } elseif ($definition instanceof Instance) {
        return ['class' => $definition->id];
    } elseif (is_callable($definition, true) || is_object($definition)) {
        return $definition;
    } elseif (is_array($definition)) {
        if (!isset($definition['class']) && isset($definition['__class'])) {
            $definition['class'] = $definition['__class'];
            unset($definition['__class']);
        }
        if (!isset($definition['class'])) {
            if (strpos($class, '\\') !== false) {
                $definition['class'] = $class;
            } else {
                throw new InvalidConfigException('A class definition requires a "class" member.');
            }
        }
        return $definition;
    }
    throw new InvalidConfigException("Unsupported definition type for \"$class\": " . gettype($definition));
}

            
off() public メソッド

定義元: yii\base\Component::off()

このコンポーネントから既存のイベントハンドラーをデタッチします。

このメソッドは on() の反対です。

注意: イベント名にワイルドカードパターンが渡された場合、このワイルドカードで登録されたハンドラーのみが削除され、このワイルドカードに一致するプレーン名で登録されたハンドラーは残ります。

参考 on()

public boolean off ( $name, $handler null )
$name 文字列

イベント名

$handler callable|null

削除するイベントハンドラー。null の場合、指定されたイベントにアタッチされたすべてのハンドラーが削除されます。

return ブール値

ハンドラーが見つかり、デタッチされた場合

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public メソッド

定義元: yii\base\Component::on()

イベントにイベントハンドラーをアタッチします。

イベントハンドラーは有効なPHPコールバックである必要があります。以下にいくつかの例を示します

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

イベントハンドラーは、次のシグネチャで定義する必要があります。

function ($event)

ここで、$event はイベントに関連付けられたパラメータを含む yii\base\Event オブジェクトです。

2.0.14 以降、イベント名をワイルドカードパターンとして指定できます。

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

参考 off()

public void on ( $name, $handler, $data null, $append true )
$name 文字列

イベント名

$handler 呼び出し可能

イベントハンドラー

$data mixed

イベントがトリガーされたときにイベントハンドラーに渡されるデータ。イベントハンドラーが呼び出されると、このデータは yii\base\Event::$data を介してアクセスできます。

$append ブール値

既存のハンドラーリストの末尾に新しいイベントハンドラーを追加するかどうか。false の場合、新しいハンドラーは既存のハンドラーリストの先頭に挿入されます。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
resolveCallableDependencies() public メソッド (バージョン 2.0.7 から利用可能)

関数の依存関係を解決します。

このメソッドは、invoke() によって提供されるのと同様の機能を他のコンポーネントで実装するために使用できます。

public array resolveCallableDependencies ( callable $callback, $params = [] )
$callback 呼び出し可能

呼び出すコールバック。

$params 配列

関数のパラメータの配列。数値または連想配列のいずれかになります。

return 配列

解決された依存関係。

throws yii\base\InvalidConfigException

依存関係を解決できない場合、または依存関係を満たすことができない場合。

throws yii\di\NotInstantiableException

(2.0.9以降)抽象クラスまたはインターフェースに解決された場合

                public function resolveCallableDependencies(callable $callback, $params = [])
{
    if (is_array($callback)) {
        $reflection = new \ReflectionMethod($callback[0], $callback[1]);
    } elseif (is_object($callback) && !$callback instanceof \Closure) {
        $reflection = new \ReflectionMethod($callback, '__invoke');
    } else {
        $reflection = new \ReflectionFunction($callback);
    }
    $args = [];
    $associative = ArrayHelper::isAssociative($params);
    foreach ($reflection->getParameters() as $param) {
        $name = $param->getName();
        if (PHP_VERSION_ID >= 80000) {
            $class = $param->getType();
            if ($class instanceof \ReflectionUnionType || (PHP_VERSION_ID >= 80100 && $class instanceof \ReflectionIntersectionType)) {
                $isClass = false;
                foreach ($class->getTypes() as $type) {
                    if (!$type->isBuiltin()) {
                        $class = $type;
                        $isClass = true;
                        break;
                    }
                }
            } else {
                $isClass = $class !== null && !$class->isBuiltin();
            }
        } else {
            $class = $param->getClass();
            $isClass = $class !== null;
        }
        if ($isClass) {
            $className = $class->getName();
            if (PHP_VERSION_ID >= 50600 && $param->isVariadic()) {
                $args = array_merge($args, array_values($params));
                break;
            }
            if ($associative && isset($params[$name]) && $params[$name] instanceof $className) {
                $args[] = $params[$name];
                unset($params[$name]);
            } elseif (!$associative && isset($params[0]) && $params[0] instanceof $className) {
                $args[] = array_shift($params);
            } elseif (isset(Yii::$app) && Yii::$app->has($name) && ($obj = Yii::$app->get($name)) instanceof $className) {
                $args[] = $obj;
            } else {
                // If the argument is optional we catch not instantiable exceptions
                try {
                    $args[] = $this->get($className);
                } catch (NotInstantiableException $e) {
                    if ($param->isDefaultValueAvailable()) {
                        $args[] = $param->getDefaultValue();
                    } else {
                        throw $e;
                    }
                }
            }
        } elseif ($associative && isset($params[$name])) {
            $args[] = $params[$name];
            unset($params[$name]);
        } elseif (!$associative && count($params)) {
            $args[] = array_shift($params);
        } elseif ($param->isDefaultValueAvailable()) {
            $args[] = $param->getDefaultValue();
        } elseif (!$param->isOptional()) {
            $funcName = $reflection->getName();
            throw new InvalidConfigException("Missing required parameter \"$name\" when calling \"$funcName\".");
        }
    }
    foreach ($params as $value) {
        $args[] = $value;
    }
    return $args;
}

            
resolveDependencies() protected メソッド

依存関係を実際のオブジェクトインスタンスに置き換えることで解決します。

protected array resolveDependencies ( $dependencies, $reflection null )
$dependencies 配列

依存関係

$reflection ReflectionClass|null

依存関係に関連付けられたクラスリフレクション

return 配列

解決済みの依存関係

throws yii\base\InvalidConfigException

依存関係を解決できない場合、または依存関係を満たすことができない場合。

                protected function resolveDependencies($dependencies, $reflection = null)
{
    foreach ($dependencies as $index => $dependency) {
        if ($dependency instanceof Instance) {
            if ($dependency->id !== null) {
                $dependencies[$index] = $dependency->get($this);
            } elseif ($reflection !== null) {
                $name = $reflection->getConstructor()->getParameters()[$index]->getName();
                $class = $reflection->getName();
                throw new InvalidConfigException("Missing required parameter \"$name\" when instantiating \"$class\".");
            }
        } elseif ($this->_resolveArrays && is_array($dependency)) {
            $dependencies[$index] = $this->resolveDependencies($dependency, $reflection);
        }
    }
    return $dependencies;
}

            
set() public メソッド

このコンテナにクラス定義を登録します。

例:

// 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 = [], array $params = [] )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

$definition mixed

$classに関連付けられた定義。以下のいずれかになります。

  • PHPのcallable:callableはget()が呼び出されたときに実行されます。callableのシグネチャはfunction ($container, $params, $config)である必要があります。ここで、$paramsはコンストラクタパラメータのリスト、$configはオブジェクト構成、$containerはコンテナオブジェクトを表します。callableの戻り値は、要求されたオブジェクトインスタンスとしてget()によって返されます。
  • 構成配列:配列は、get()が呼び出されたときに、新しく作成されたオブジェクトのプロパティ値を初期化するために使用される名前と値のペアを含みます。class要素は、作成されるオブジェクトのクラスを表します。classが指定されていない場合、$classがクラス名として使用されます。
  • 文字列:クラス名、インターフェース名、またはエイリアス名。
$params 配列

コンストラクタパラメータのリスト。パラメータは、get()が呼び出されたときに、クラスコンストラクタに渡されます。

return $this

コンテナ自体

                public function set($class, $definition = [], array $params = [])
{
    $this->_definitions[$class] = $this->normalizeDefinition($class, $definition);
    $this->_params[$class] = $params;
    unset($this->_singletons[$class]);
    return $this;
}

            
setDefinitions() public メソッド (バージョン 2.0.11 以降で利用可能)

このコンテナ内にクラス定義を登録します。

定義の可能な値の詳細については、set()も参照してください。

public void setDefinitions ( array $definitions )
$definitions 配列

定義の配列。配列には2つの許可された形式があります。最初の形式は

  • キー:クラス名、インターフェース名、またはエイリアス名。キーは、最初の引数 $classとしてset()メソッドに渡されます。
  • 値:$classに関連付けられた定義。可能な値は、$definitionパラメータのset()ドキュメントで説明されています。2番目の引数$definitionとしてset()メソッドに渡されます。

例:`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);
}

]); `

2番目の形式

  • キー:クラス名、インターフェース名、またはエイリアス名。キーは、最初の引数 $classとしてset()メソッドに渡されます。
  • 値:2つの要素の配列。最初の要素は2番目の引数$definitionとしてset()メソッドに渡され、2番目の要素は$paramsとして渡されます。

例:`php $container->setDefinitions([

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

]); `

                public function setDefinitions(array $definitions)
{
    foreach ($definitions as $class => $definition) {
        if (is_array($definition) && count($definition) === 2 && array_values($definition) === $definition && is_array($definition[1])) {
            $this->set($class, $definition[0], $definition[1]);
            continue;
        }
        $this->set($class, $definition);
    }
}

            
setResolveArrays() public メソッド (バージョン 2.0.37 以降で利用可能)

public void setResolveArrays ( $value )
$value ブール値

配列の依存関係の要素を解決しようとするかどうか

                public function setResolveArrays($value)
{
    $this->_resolveArrays = (bool) $value;
}

            
setSingleton() public メソッド

このコンテナにクラス定義を登録し、クラスをシングルトンクラスとしてマークします。

このメソッドは、set()に似ていますが、このメソッドを介して登録されたクラスは1つのインスタンスのみを持つ点が異なります。get()が呼び出されるたびに、指定されたクラスの同じインスタンスが返されます。

set() も参照してください。

public $this setSingleton ( $class, $definition = [], array $params = [] )
$class 文字列

クラス名、インターフェース名、またはエイリアス名

$definition mixed

$classに関連付けられた定義。詳細については、set()を参照してください。

$params 配列

コンストラクタパラメータのリスト。パラメータは、get()が呼び出されたときに、クラスコンストラクタに渡されます。

return $this

コンテナ自体

                public function setSingleton($class, $definition = [], array $params = [])
{
    $this->_definitions[$class] = $this->normalizeDefinition($class, $definition);
    $this->_params[$class] = $params;
    $this->_singletons[$class] = null;
    return $this;
}

            
setSingletons() public メソッド (バージョン 2.0.11 以降で利用可能)

setSingleton() を呼び出して、このコンテナ内にクラス定義をシングルトンとして登録します。

参考

  • $singletonsパラメータの許可された形式については、setDefinitions()を参照してください。
  • 定義の可能な値の詳細については、setSingleton()を参照してください。
public void setSingletons ( array $singletons )
$singletons 配列

シングルトン定義の配列。配列の許容形式についてはsetDefinitions()を参照してください。

                public function setSingletons(array $singletons)
{
    foreach ($singletons as $class => $definition) {
        if (is_array($definition) && count($definition) === 2 && array_values($definition) === $definition) {
            $this->setSingleton($class, $definition[0], $definition[1]);
            continue;
        }
        $this->setSingleton($class, $definition);
    }
}

            
trigger() public メソッド

定義元: yii\base\Component::trigger()

イベントをトリガーします。

このメソッドは、イベントの発生を表します。クラスレベルのハンドラを含む、イベントに添付されたすべてのハンドラを呼び出します。

public void trigger ( $name, yii\base\Event $event null )
$name 文字列

イベント名

$event yii\base\Event|null

イベントインスタンス。設定されていない場合、デフォルトのyii\base\Eventオブジェクトが作成されます。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}