eca-1.0.x-dev/src/Event/TriggerEvent.php
src/Event/TriggerEvent.php
<?php
namespace Drupal\eca\Event;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\Component\Plugin\PluginManagerInterface;
use Symfony\Contracts\EventDispatcher\Event;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* Helper for triggering ECA-related events.
*/
class TriggerEvent {
/**
* The event plugin manager.
*
* @var \Drupal\Component\Plugin\PluginManagerInterface
*/
protected PluginManagerInterface $eventPluginManager;
/**
* An event dispatcher instance to use for ECA-related events.
*
* @var \Symfony\Contracts\EventDispatcher\EventDispatcherInterface
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* The TriggerEvent constructor.
*
* @param \Drupal\Component\Plugin\PluginManagerInterface $event_plugin_manager
* The event plugin manager.
* @param \Symfony\Contracts\EventDispatcher\EventDispatcherInterface $event_dispatcher
* An event dispatcher instance to use for ECA-related events.
*/
public function __construct(PluginManagerInterface $event_plugin_manager, EventDispatcherInterface $event_dispatcher) {
$this->eventPluginManager = $event_plugin_manager;
$this->eventDispatcher = $event_dispatcher;
}
/**
* Dispatches an event by using definitions from the given plugin ID.
*
* @param string $plugin_id
* The plugin ID of the ECA-related event ("EcaEvent").
* @param mixed &$args
* Arguments that shall be passed to the constructor of the event object.
*
* @return \Symfony\Contracts\EventDispatcher\Event|null
* The dispatched event, or NULL if no event was dispatched.
*/
public function dispatchFromPlugin(string $plugin_id, &...$args): Event|null {
try {
/**
* @var \Drupal\eca\Plugin\ECA\Event\EventInterface $event_plugin
*/
$event_plugin = $this->eventPluginManager->createInstance($plugin_id);
}
catch (PluginException) {
// @todo Log this exception.
return NULL;
}
$event_class = $event_plugin->eventClass();
$event = new $event_class(...$args);
$this->eventDispatcher->dispatch($event, $event_plugin->eventName());
return $event;
}
}
