0 关注者

类 yii\mail\MailEvent

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

MailEvent 表示由 yii\mail\BaseMailer 触发的事件的事件参数。

通过设置 $isValid 属性,可以控制是否继续运行操作。

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$data 混合 在附加事件处理程序时传递给 yii\base\Component::on() 的数据。 yii\base\Event
$handled 布尔值 事件是否已处理。 yii\base\Event
$isSuccessful 布尔值 如果邮件发送成功。 yii\mail\MailEvent
$isValid 布尔值 是否继续发送邮件。 yii\mail\MailEvent
$message yii\mail\MessageInterface 正在发送的邮件。 yii\mail\MailEvent
$name 字符串 事件名称。 yii\base\Event
$sender 对象|空值 此事件的发送方。 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

属性详细信息

隐藏继承的属性

$isSuccessful 公共属性

如果邮件发送成功。

public 布尔值 $isSuccessful null
$isValid 公共属性

是否继续发送邮件。 yii\mail\BaseMailer::EVENT_BEFORE_SEND 的事件处理程序可以设置此属性以决定是否继续发送。

public 布尔值 $isValid true
$message 公共属性

正在发送的邮件。

方法详细信息

隐藏继承的方法

__call() 公共方法

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

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

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

public 混合 __call ( $name, $params )
$name 字符串

方法名称

$params 数组

方法参数

返回值 混合

方法返回值

抛出 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 数组

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

                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 字符串

属性名

返回值 混合

属性值

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

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

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

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

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

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

public boolean __isset ( $name )
$name 字符串

属性名或事件名

返回值 布尔值

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

                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 字符串

属性名或事件名

$value 混合

属性值

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

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

将对象属性设置为 null。

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

请注意,如果未定义属性,此方法将不做任何事情。如果属性是只读,它将抛出异常。

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

public void __unset ( $name )
$name 字符串

属性名

抛出 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 为真时);

另请参见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name 字符串

属性名

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否可读

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

            
canSetProperty() 公共方法

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

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

如果一个属性是可写的

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

另请参见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name 字符串

属性名

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否可写

                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 ( )
返回值 字符串

此类的完全限定名称。

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

            
hasHandlers() 公共静态方法

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

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

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

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

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

$name 字符串

事件名称。

返回值 布尔值

是否有任何处理程序附加到事件。

                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 字符串

方法名称

返回值 布尔值

方法是否已定义

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

            
hasProperty() 公共方法

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

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

如果一个属性是已定义的

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

另请参见

public boolean hasProperty ( $name, $checkVars true )
$name 字符串

属性名

$checkVars 布尔值

是否将成员变量视为属性

返回值 布尔值

属性是否已定义

                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 字符串

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

$name 字符串

事件名称。

$handler callable|null

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

返回值 布尔值

是否找到并分离了处理程序。

                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 字符串

需要附加事件处理程序的完全限定类名。

$name 字符串

事件名称。

$handler callable

事件处理程序。

$data 混合

触发事件时传递给事件处理程序的数据。当调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。

$append 布尔值

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 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 字符串

事件名称。

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