X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=Civi%2FCore%2FCiviEventDispatcher.php;h=9f3da3215e4fcacc0659bf4836632f05e5313e05;hb=ffc370ffa721fecfaee7cd615119412f5bbf6e67;hp=18d8aa30438ddebef9d8b6bd078d078f54fa1c82;hpb=f70de7b0f4cbdee6f8e75e38db37e12efccc2ccf;p=civicrm-core.git diff --git a/Civi/Core/CiviEventDispatcher.php b/Civi/Core/CiviEventDispatcher.php index 18d8aa3043..9f3da3215e 100644 --- a/Civi/Core/CiviEventDispatcher.php +++ b/Civi/Core/CiviEventDispatcher.php @@ -2,7 +2,7 @@ namespace Civi\Core; -use Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher; +use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\Event; /** @@ -15,7 +15,7 @@ use Symfony\Component\EventDispatcher\Event; * * @see \CRM_Utils_Hook */ -class CiviEventDispatcher extends ContainerAwareEventDispatcher { +class CiviEventDispatcher extends EventDispatcher { const DEFAULT_HOOK_PRIORITY = -100; @@ -61,6 +61,34 @@ class CiviEventDispatcher extends ContainerAwareEventDispatcher { return (substr($eventName, 0, 5) === 'hook_') && (strpos($eventName, '::') === FALSE); } + /** + * Adds a service as event listener. + * + * This provides partial backwards compatibility with ContainerAwareEventDispatcher. + * + * @param string $eventName Event for which the listener is added + * @param array $callback The service ID of the listener service & the method + * name that has to be called + * @param int $priority The higher this value, the earlier an event listener + * will be triggered in the chain. + * Defaults to 0. + * + * @throws \InvalidArgumentException + */ + public function addListenerService($eventName, $callback, $priority = 0) { + if (!\is_array($callback) || 2 !== \count($callback)) { + throw new \InvalidArgumentException('Expected an array("service", "method") argument'); + } + + $this->addListener($eventName, function($event) use ($callback) { + static $svc; + if ($svc === NULL) { + $svc = \Civi::container()->get($callback[0]); + } + return call_user_func([$svc, $callback[1]], $event); + }, $priority); + } + /** * @inheritDoc */