類別 yii\web\UserEvent
繼承關係 | yii\web\UserEvent » yii\base\Event » yii\base\BaseObject |
---|---|
實作 | yii\base\Configurable |
自版本起可用 | 2.0 |
原始碼 | https://github.com/yiisoft/yii2/blob/master/framework/web/UserEvent.php |
此事件類別用於 yii\web\User 類別觸發的事件。
公開屬性
屬性 | 類型 | 描述 | 定義於 |
---|---|---|---|
$cookieBased | boolean | 是否為基於 Cookie 的登入。 | yii\web\UserEvent |
$data | mixed | 附加事件處理程序時,傳遞給 yii\base\Component::on() 的資料。 | yii\base\Event |
$duration | integer | 使用者可以保持登入狀態的秒數。 | yii\web\UserEvent |
$handled | boolean | 事件是否已被處理。 | yii\base\Event |
$identity | yii\web\IdentityInterface | 與此事件關聯的身分物件 | yii\web\UserEvent |
$isValid | boolean | 是否應繼續登入或登出。 | yii\web\UserEvent |
$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 |
屬性詳細資訊
指示登入或登出是否應繼續。事件處理常式可以修改此屬性,以決定登入或登出是否應繼續。此屬性僅適用於 yii\web\User::EVENT_BEFORE_LOGIN 和 yii\web\User::EVENT_BEFORE_LOGOUT 事件。
方法詳細資訊
public mixed __call ( $name, $params ) | ||
$name | string |
方法名稱 |
$params | array |
方法參數 |
傳回 | mixed |
方法傳回值 |
---|---|---|
拋出 | yii\base\UnknownMethodException |
當呼叫未知方法時 |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
定義於: 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();
}
定義於: yii\base\BaseObject::__get()
傳回物件屬性的值。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,會在執行 $value = $object->property;
時隱含地呼叫。
另請參閱 __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);
}
定義於: yii\base\BaseObject::__isset()
檢查屬性是否已設定,即已定義且非 null。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,會在執行 isset($object->property)
時隱含地呼叫。
請注意,如果未定義屬性,將會傳回 false。
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;
}
定義於: yii\base\BaseObject::__set()
設定物件屬性的值。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,會在執行 $object->property = $value;
時隱含地呼叫。
另請參閱 __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);
}
}
定義於: yii\base\BaseObject::__unset()
將物件屬性設定為 null。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,會在執行 unset($object->property)
時隱含地呼叫。
請注意,如果未定義屬性,此方法將不會執行任何動作。如果屬性為唯讀,則會拋出例外。
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);
}
}
定義於: 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);
}
定義於: 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);
}
::class
。
定義於: yii\base\BaseObject::className()
傳回此類別的完整限定名稱。
public static string className ( ) | ||
傳回 | string |
此類別的完整限定名稱。 |
---|
public static function className()
{
return get_called_class();
}
定義於: yii\base\Event::hasHandlers()
傳回一個值,指示是否有任何處理常式附加到指定的類別層級事件。
請注意,此方法也會檢查所有父類別,以查看是否有任何處理常式附加到已命名的事件。
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;
}
定義於: 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);
}
定義於: yii\base\BaseObject::hasProperty()
傳回一個值,指示是否已定義屬性。
在下列情況下,屬性為已定義的
- 類別具有與指定名稱相關聯的 getter 或 setter 方法 (在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數 (當
$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);
}
public void init ( ) |
public function init()
{
}
從類別層級事件中分離事件處理常式。
此方法與 on() 相反。
注意:如果為類別名稱或事件名稱傳遞了萬用字元模式,則只會移除使用此萬用字元註冊的處理常式,而使用符合此萬用字元的純名稱註冊的處理常式將會保留。
另請參閱 on()。
public static boolean off ( $class, $name, $handler = null ) | ||
$class | string |
需要從中分離事件處理常式的完整限定類別名稱。 |
$name | string |
事件名稱。 |
$handler | callable|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;
}
public static void offAll ( ) |
public static function offAll()
{
self::$_events = [];
self::$_eventWildcards = [];
}
定義於: yii\base\Event::on()
將事件處理常式附加到類別層級事件。
當觸發類別層級事件時,將會呼叫附加到該類別和所有父類別的事件處理常式。
例如,下列程式碼會將事件處理常式附加到 ActiveRecord
的 afterInsert
事件
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 |
指示是否將新的事件處理常式附加到現有處理常式清單的末尾。如果為 |
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]);
}
}
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;
}
}
}
}
註冊 或 登入 以發表評論。