You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.3 KiB
68 lines
1.3 KiB
<?php |
|
|
|
namespace Maatwebsite\Excel; |
|
|
|
trait HasEventBus |
|
{ |
|
/** |
|
* @var array |
|
*/ |
|
protected static $globalEvents = []; |
|
|
|
/** |
|
* @var array |
|
*/ |
|
protected $events = []; |
|
|
|
/** |
|
* Register local event listeners. |
|
* |
|
* @param array $listeners |
|
*/ |
|
public function registerListeners(array $listeners) |
|
{ |
|
foreach ($listeners as $event => $listener) { |
|
$this->events[$event][] = $listener; |
|
} |
|
} |
|
|
|
public function clearListeners() |
|
{ |
|
$this->events = []; |
|
} |
|
|
|
/** |
|
* Register a global event listener. |
|
* |
|
* @param string $event |
|
* @param callable $listener |
|
*/ |
|
public static function listen(string $event, callable $listener) |
|
{ |
|
static::$globalEvents[$event][] = $listener; |
|
} |
|
|
|
/** |
|
* @param object $event |
|
*/ |
|
public function raise($event) |
|
{ |
|
foreach ($this->listeners($event) as $listener) { |
|
$listener($event); |
|
} |
|
} |
|
|
|
/** |
|
* @param object $event |
|
* @return callable[] |
|
*/ |
|
public function listeners($event): array |
|
{ |
|
$name = \get_class($event); |
|
|
|
$localListeners = $this->events[$name] ?? []; |
|
$globalListeners = static::$globalEvents[$name] ?? []; |
|
|
|
return array_merge($globalListeners, $localListeners); |
|
} |
|
}
|
|
|