0 关注者

类 yii\db\AfterSaveEvent

继承yii\db\AfterSaveEvent » yii\base\Event » yii\base\BaseObject
实现yii\base\Configurable
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/AfterSaveEvent.php

AfterSaveEvent 表示在 yii\db\ActiveRecord::EVENT_AFTER_INSERTyii\db\ActiveRecord::EVENT_AFTER_UPDATE 中可用的信息。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$changedAttributes array 已更改并已保存的属性值。 yii\db\AfterSaveEvent
$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() 检查属性是否已设置,即已定义且不为空。 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

属性详细信息

隐藏继承的属性

$changedAttributes 公共属性

已更改并已保存的属性值。

public array $changedAttributes null

方法详细信息

隐藏继承的方法

__call() 公共方法

定义于: yii\base\BaseObject::__call()

调用不是类方法的命名方法。

不要直接调用此方法,因为它是 PHP 魔术方法,当调用未知方法时会隐式调用它。

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

方法名称

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

当调用未知方法时

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

            
__construct() 公共方法

定义于: yii\base\BaseObject::__construct()

构造函数。

默认实现执行两件事

  • 使用给定的配置 $config 初始化对象。
  • 调用 init()

如果此方法在子类中被覆盖,建议

  • 构造函数的最后一个参数是一个配置数组,如这里的 $config
  • 在构造函数的末尾调用父实现。
public void __construct ( $config = [] )
$config array

将用于初始化对象属性的名称-值对

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

            
__get() 公共方法

定义于: yii\base\BaseObject::__get()

返回对象属性的值。

不要直接调用此方法,因为它是 PHP 魔术方法,它会在执行 $value = $object->property; 时隐式调用。

另请参阅 __set()

public mixed __get ( $name )
$name string

属性名称

return mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws 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() 公共方法

定义于: yii\base\BaseObject::__isset()

检查属性是否已设置,即已定义且不为空。

不要直接调用此方法,因为它是 PHP 魔术方法,它会在执行 isset($object->property) 时隐式调用。

请注意,如果属性未定义,将返回 false。

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置(不为空)。

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

            
__set() 公共方法

定义于: yii\base\BaseObject::__set()

设置对象属性的值。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $object->property = $value; 时会隐式调用。

另见 __get().

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

属性名称或事件名称

$value mixed

属性值

throws yii\base\UnknownPropertyException

如果属性未定义

throws 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() 公共方法

定义于: yii\base\BaseObject::__unset()

将对象属性设置为 null。

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($object->property) 时会隐式调用。

请注意,如果属性未定义,此方法将不执行任何操作。如果属性为只读,它将抛出异常。

另见 https://php.ac.cn/manual/en/function.unset.php.

public void __unset ( $name )
$name string

属性名称

throws 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() 公共方法

定义于: yii\base\BaseObject::canGetProperty()

返回一个值,指示是否可以读取属性。

属性可读如果

  • 该类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另见 canSetProperty().

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

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可读

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

            
canSetProperty() 公共方法

定义于: yii\base\BaseObject::canSetProperty()

返回一个值,指示是否可以设置属性。

属性可写如果

  • 该类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另见 canGetProperty().

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

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否可写

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

            
className() 公共静态方法
自 2.0.14 起弃用。在 PHP >=5.5 上,请使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名称。

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

            
hasHandlers() 公共静态方法

定义于: yii\base\Event::hasHandlers()

返回一个值,指示是否有任何处理程序附加到指定的类级事件。

请注意,此方法还会检查所有父类,以查看是否有任何处理程序附加到命名事件。

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

指定类级别事件的对象或完全限定的类名。

$name string

事件名称。

return 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() 公共方法

定义于: yii\base\BaseObject::hasMethod()

返回一个值,指示方法是否已定义。

默认实现是对 php 函数 method_exists() 的调用。当您实现 php 魔术方法 __call() 时,您可以覆盖此方法。

public boolean hasMethod ( $name )
$name string

方法名称

return boolean

方法是否已定义

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

            
hasProperty() 公共方法

定义于: yii\base\BaseObject::hasProperty()

返回一个值,指示属性是否已定义。

属性已定义如果

  • 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 该类具有与指定名称相同的成员变量(当 $checkVars 为 true 时);

另见

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

属性名称

$checkVars boolean

是否将成员变量视为属性

return boolean

属性是否已定义

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

            
init() 公共方法

定义于: yii\base\BaseObject::init()

初始化对象。

此方法在构造函数结束时调用,在使用给定配置初始化对象后调用。

public void init ( )

                public function init()
{
}

            
off() 公共静态方法

定义于: yii\base\Event::off()

从类级事件中分离事件处理程序。

此方法与 on() 相反。

注意:如果为类名或事件名传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的普通名称注册的处理程序将保留。

另见 on().

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

需要从中分离事件处理程序的完全限定类名。

$name string

事件名称。

$handler callable|null

要删除的事件处理程序。如果它是 null,则将删除附加到命名事件的所有处理程序。

return 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() 公共静态方法 (自版本 2.0.10 起可用)

定义于: yii\base\Event::offAll()

分离所有已注册的类级事件处理程序。

另见

public static void offAll ( )

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

            
on() 公共静态方法

定义于: yii\base\Event::on()

将事件处理程序附加到类级事件。

当触发类级别事件时,将调用附加到该类及其所有父类上的事件处理程序。

例如,以下代码将事件处理程序附加到 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() 公共静态方法

定义于: yii\base\Event::trigger()

触发类级事件。

此方法将导致调用附加到指定类及其所有父类上的命名事件的事件处理程序。

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