0 フォロワー

クラス yii\base\Event

継承yii\base\Event » yii\base\BaseObject
実装yii\base\Configurable
サブクラスyii\base\ActionEvent, yii\base\ModelEvent, yii\base\ViewEvent, yii\base\WidgetEvent, yii\db\AfterSaveEvent, yii\i18n\MissingTranslationEvent, yii\mail\MailEvent, yii\web\UserEvent
利用可能なバージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/base/Event.php

Event はすべてのイベントクラスの基本クラスです。

イベントに関連付けられたパラメータをカプセル化します。$sender プロパティは、誰がイベントを発生させたかを記述します。そして、$handled プロパティは、イベントが処理されたかどうかを示します。イベントハンドラーが $handledtrue に設定した場合、未呼び出しのハンドラーはイベントを処理するために呼び出されなくなります。

さらに、イベントハンドラーをアタッチするとき、追加のデータを渡すことができ、イベントハンドラーが呼び出されるときに $data プロパティを通じて利用可能になります。

Event の詳細および使用方法については、イベントに関するガイド記事を参照してください。

公開プロパティ

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

プロパティ 説明 定義元
$data mixed yii\base\Component::on() イベントハンドラーをアタッチするときに渡されるデータ。 yii\base\Event
$handled boolean イベントが処理されたかどうか。 yii\base\Event
$name string イベント名。 yii\base\Event
$sender object|null このイベントの送信者。 yii\base\Event

公開メソッド

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

メソッド 説明 定義元
__call() クラスメソッドではない名前付きメソッドを呼び出します。 yii\base\BaseObject
__construct() コンストラクタ。 yii\base\BaseObject
__get() オブジェクトのプロパティの値を返します。 yii\base\BaseObject
__isset() プロパティが設定されているか、つまり定義されていて null でないかを確認します。 yii\base\BaseObject
__set() オブジェクトのプロパティの値を設定します。 yii\base\BaseObject
__unset() オブジェクトのプロパティを null に設定します。 yii\base\BaseObject
canGetProperty() プロパティが読み取り可能かどうかを示す値を返します。 yii\base\BaseObject
canSetProperty() プロパティが設定可能かどうかを示す値を返します。 yii\base\BaseObject
className() このクラスの完全修飾名を返します。 yii\base\BaseObject
hasHandlers() 指定されたクラスレベルのイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。 yii\base\Event
hasMethod() メソッドが定義されているかどうかを示す値を返します。 yii\base\BaseObject
hasProperty() プロパティが定義されているかどうかを示す値を返します。 yii\base\BaseObject
init() オブジェクトを初期化します。 yii\base\BaseObject
off() クラスレベルのイベントからイベントハンドラーをデタッチします。 yii\base\Event
offAll() 登録されているすべてのクラスレベルのイベントハンドラーをデタッチします。 yii\base\Event
on() クラスレベルのイベントにイベントハンドラーをアタッチします。 yii\base\Event
trigger() クラスレベルのイベントをトリガーします。 yii\base\Event

プロパティの詳細

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

$data public プロパティ

yii\base\Component::on() イベントハンドラーをアタッチするときに渡されるデータ。これは、現在実行中のイベントハンドラーによって異なることに注意してください。

public mixed $data null
$handled public プロパティ

イベントが処理されたかどうか。デフォルトは false です。ハンドラーがこれを true に設定すると、イベント処理は停止し、未呼び出しのイベントハンドラーの残りを無視します。

public boolean $handled false
$name public プロパティ

イベント名。このプロパティは yii\base\Component::trigger() および trigger() によって設定されます。イベントハンドラーは、このプロパティを使用して、処理中のイベントをチェックできます。

public string $name null
$sender public プロパティ

このイベントの送信者。設定されていない場合、このプロパティは trigger() メソッドが呼び出されたオブジェクトとして設定されます。このイベントが静的コンテキストでトリガーされるクラスレベルのイベントである場合、このプロパティは null になることもあります。

public object|null $sender null

メソッド詳細

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

__call() public メソッド

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

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

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

public mixed __call ( $name, $params )
$name string

メソッド名

$params 配列

メソッドのパラメータ

戻り値 mixed

メソッドの戻り値

例外 yii\base\UnknownMethodException

不明なメソッドを呼び出すとき

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__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\BaseObject::__get()

オブジェクトのプロパティの値を返します。

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

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

public mixed __get ( $name )
$name string

プロパティ名

戻り値 mixed

プロパティの値

例外 yii\base\UnknownPropertyException

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

例外 yii\base\InvalidCallException

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

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (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\BaseObject::__isset()

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

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

プロパティが定義されていない場合は、false が返されることに注意してください。

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

public boolean __isset ( $name )
$name string

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

戻り値 boolean

名前付きプロパティが設定されているか (null ではないか)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public メソッド

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

オブジェクトのプロパティの値を設定します。

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

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

public void __set ( $name, $value )
$name string

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

$value mixed

プロパティの値

例外 yii\base\UnknownPropertyException

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

例外 yii\base\InvalidCallException

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

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public メソッド

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

オブジェクトのプロパティを null に設定します。

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

プロパティが定義されていない場合、このメソッドは何もしないことに注意してください。プロパティが読み取り専用の場合、例外をスローします。

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

public void __unset ( $name )
$name string

プロパティ名

例外 yii\base\InvalidCallException

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

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() public メソッド

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

プロパティが読み取り可能かどうかを示す値を返します。

プロパティが読み取り可能であるのは、以下のいずれかの場合です。

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

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

public boolean canGetProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

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

戻り値 boolean

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

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public メソッド

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

プロパティが設定可能かどうかを示す値を返します。

プロパティが書き込み可能であるのは、以下のいずれかの場合です。

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

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

public boolean canSetProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

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

戻り値 boolean

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

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

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

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

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

public static string className ( )
戻り値 string

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

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

            
hasHandlers() public static method

指定されたクラスレベルのイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。

このメソッドは、指定されたイベントにハンドラーがアタッチされているかどうかを、すべての親クラスについてもチェックすることに注意してください。

public static boolean hasHandlers ( $class, $name )
$class string|object

クラスレベルのイベントを指定するオブジェクトまたは完全修飾クラス名。

$name string

イベント名。

戻り値 boolean

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

                public static function hasHandlers($class, $name)
{
    if (empty(self::$_eventWildcards) && empty(self::$_events[$name])) {
        return false;
    }
    if (is_object($class)) {
        $class = get_class($class);
    } else {
        $class = ltrim($class, '\\');
    }
    $classes = array_merge(
        [$class],
        class_parents($class, true),
        class_implements($class, true)
    );
    // regular events
    foreach ($classes as $className) {
        if (!empty(self::$_events[$name][$className])) {
            return true;
        }
    }
    // wildcard events
    foreach (self::$_eventWildcards as $nameWildcard => $classHandlers) {
        if (!StringHelper::matchWildcard($nameWildcard, $name, ['escape' => false])) {
            continue;
        }
        foreach ($classHandlers as $classWildcard => $handlers) {
            if (empty($handlers)) {
                continue;
            }
            foreach ($classes as $className) {
                if (StringHelper::matchWildcard($classWildcard, $className, ['escape' => false])) {
                    return true;
                }
            }
        }
    }
    return false;
}

            
hasMethod() public method

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

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

デフォルトの実装は、PHP関数 method_exists() の呼び出しです。PHPのマジックメソッド __call() を実装した場合、このメソッドをオーバーライドできます。

public boolean hasMethod ( $name )
$name string

メソッド名

戻り値 boolean

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

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public method

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

プロパティが定義されているかどうかを示す値を返します。

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

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

こちらも参照

public boolean hasProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

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

戻り値 boolean

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

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

            
init() public method

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

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

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

public void init ( )

                public function init()
{
}

            
off() public static method

クラスレベルのイベントからイベントハンドラーをデタッチします。

このメソッドは、on() の逆です。

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

こちらも参照 on().

public static boolean off ( $class, $name, $handler null )
$class string

イベントハンドラーをデタッチする必要がある完全修飾クラス名。

$name string

イベント名。

$handler callable|null

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

戻り値 boolean

ハンドラーが見つかり、デタッチされたかどうか。

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

            
offAll() public static method (バージョン2.0.10から利用可能)

登録されているすべてのクラスレベルのイベントハンドラーをデタッチします。

こちらも参照

public static void offAll ( )

                public static function offAll()
{
    self::$_events = [];
    self::$_eventWildcards = [];
}

            
on() public static method

クラスレベルのイベントにイベントハンドラーをアタッチします。

クラスレベルのイベントがトリガーされると、そのクラスおよびすべての親クラスにアタッチされたイベントハンドラーが呼び出されます。

たとえば、次のコードでは ActiveRecordafterInsert イベントにイベントハンドラーをアタッチします

Event::on(ActiveRecord::class, ActiveRecord::EVENT_AFTER_INSERT, function ($event) {
    Yii::trace(get_class($event->sender) . ' is inserted.');
});

このハンドラーは、ActiveRecordの挿入が成功するたびに呼び出されます。

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

Event::on('app\models\db\*', '*Insert', function ($event) {
    Yii::trace(get_class($event->sender) . ' is inserted.');
});

イベントハンドラーの宣言方法の詳細については、yii\base\Component::on() を参照してください。

こちらも参照 off().

public static void on ( $class, $name, $handler, $data null, $append true )
$class string

イベントハンドラーをアタッチする必要がある完全修飾クラス名。

$name string

イベント名。

$handler callable

イベントハンドラー。

$data mixed

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

$append boolean

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

                public static function on($class, $name, $handler, $data = null, $append = true)
{
    $class = ltrim($class, '\\');
    if (strpos($class, '*') !== false || strpos($name, '*') !== false) {
        if ($append || empty(self::$_eventWildcards[$name][$class])) {
            self::$_eventWildcards[$name][$class][] = [$handler, $data];
        } else {
            array_unshift(self::$_eventWildcards[$name][$class], [$handler, $data]);
        }
        return;
    }
    if ($append || empty(self::$_events[$name][$class])) {
        self::$_events[$name][$class][] = [$handler, $data];
    } else {
        array_unshift(self::$_events[$name][$class], [$handler, $data]);
    }
}

            
trigger() public static method

クラスレベルのイベントをトリガーします。

このメソッドは、指定されたクラスとそのすべての親クラスについて、名前付きイベントにアタッチされているイベントハンドラーの呼び出しを発生させます。

public static void trigger ( $class, $name, $event null )
$class string|object

クラスレベルのイベントを指定するオブジェクトまたは完全修飾クラス名。

$name string

イベント名。

$event yii\base\Event|null

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

                public static function trigger($class, $name, $event = null)
{
    $wildcardEventHandlers = [];
    foreach (self::$_eventWildcards as $nameWildcard => $classHandlers) {
        if (!StringHelper::matchWildcard($nameWildcard, $name)) {
            continue;
        }
        $wildcardEventHandlers = array_merge($wildcardEventHandlers, $classHandlers);
    }
    if (empty(self::$_events[$name]) && empty($wildcardEventHandlers)) {
        return;
    }
    if ($event === null) {
        $event = new static();
    }
    $event->handled = false;
    $event->name = $name;
    if (is_object($class)) {
        if ($event->sender === null) {
            $event->sender = $class;
        }
        $class = get_class($class);
    } else {
        $class = ltrim($class, '\\');
    }
    $classes = array_merge(
        [$class],
        class_parents($class, true),
        class_implements($class, true)
    );
    foreach ($classes as $class) {
        $eventHandlers = [];
        foreach ($wildcardEventHandlers as $classWildcard => $handlers) {
            if (StringHelper::matchWildcard($classWildcard, $class, ['escape' => false])) {
                $eventHandlers = array_merge($eventHandlers, $handlers);
                unset($wildcardEventHandlers[$classWildcard]);
            }
        }
        if (!empty(self::$_events[$name][$class])) {
            $eventHandlers = array_merge($eventHandlers, self::$_events[$name][$class]);
        }
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            if ($event->handled) {
                return;
            }
        }
    }
}