modify
This commit is contained in:
+27
-14
@@ -153,13 +153,17 @@ class Event extends BaseObject
|
|||||||
*/
|
*/
|
||||||
public function get($name, $handler): mixed
|
public function get($name, $handler): mixed
|
||||||
{
|
{
|
||||||
if (!$this->exists($name)) {
|
if (!$this->exists($name, $handler)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($handler)) {
|
||||||
|
return $this->_events[$name];
|
||||||
|
}
|
||||||
foreach ($this->_events[$name] as $event) {
|
foreach ($this->_events[$name] as $event) {
|
||||||
[$callback, $parameter] = $event;
|
[$callback, $parameter] = $event;
|
||||||
if ($callback === $handler) {
|
if ($callback === $handler) {
|
||||||
return $event;
|
return [$event];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -193,28 +197,37 @@ class Event extends BaseObject
|
|||||||
*/
|
*/
|
||||||
public function trigger($name, $parameter = null, $handler = null, $is_remove = false): bool
|
public function trigger($name, $parameter = null, $handler = null, $is_remove = false): bool
|
||||||
{
|
{
|
||||||
try {
|
$events = $this->get($name, $handler);
|
||||||
if (!$this->exists($name)) {
|
if (empty($events)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!empty($handler) && $this->exists($name, $handler)) {
|
|
||||||
$events = [$this->get($name, $handler)];
|
|
||||||
} else {
|
|
||||||
$events = $this->_events[$name];
|
|
||||||
}
|
|
||||||
foreach ($events as $index => $event) {
|
foreach ($events as $index => $event) {
|
||||||
$meta = $this->mergeParams($event[1], $parameter);
|
$this->execute($event, $parameter);
|
||||||
if (call_user_func($event[0], ...$meta) === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($is_remove) {
|
if ($is_remove) {
|
||||||
$this->offName($name);
|
$this->offName($name);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} catch (\Throwable $throwable) {
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $event
|
||||||
|
* @param $parameter
|
||||||
|
* @return bool
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private function execute($event, $parameter)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$meta = $this->mergeParams($event[1], $parameter);
|
||||||
|
if (call_user_func($event[0], ...$meta) === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
} catch (\Throwable $throwable) {
|
||||||
|
return $this->addError($throwable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user