[feature/event-dispatcher] Add phpbb_event_dispatcher_wrapper

PHPBB3-9550
This commit is contained in:
Igor Wiedler 2012-03-21 13:15:45 +01:00
parent b4b586ae10
commit baefbdb882
2 changed files with 89 additions and 1 deletions

View file

@ -100,7 +100,7 @@ $phpbb_class_loader_ext->set_cache($cache->get_driver());
$phpbb_class_loader->set_cache($cache->get_driver()); $phpbb_class_loader->set_cache($cache->get_driver());
// Instantiate some basic classes // Instantiate some basic classes
$phpbb_dispatcher = new EventDispatcher(); $phpbb_dispatcher = new phpbb_event_dispatcher_wrapper(new EventDispatcher());
$request = new phpbb_request(); $request = new phpbb_request();
$user = new user(); $user = new user();
$auth = new auth(); $auth = new auth();

View file

@ -0,0 +1,88 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
/**
* Wrapper around a Symfony2 EventDispatcherInterface
*
* It provides an additional `trigger_event` method, which
* gives some syntactic sugar for dispatching events. Instead
* of creating the event object, the method will do that for
* you.
*
* Example:
*
* $vars = array('page_title');
* extract($phpbb_dispatcher->trigger_event('core.index', compact($vars)));
*
* Apart from that it implements the EventDispatcherInterface
* and proxies all method calls to the member dispatcher.
*/
class phpbb_event_dispatcher_wrapper implements EventDispatcherInterface
{
private $dispatcher;
public function __construct(EventDispatcherInterface $dispatcher)
{
$this->dispatcher = $dispatcher;
}
public function dispatch($eventName, Event $event = null)
{
$this->dispatcher->dispatch($eventName, $event);
}
public function addListener($eventName, $listener, $priority = 0)
{
$this->dispatcher->addListener($eventName, $listener, $priority);
}
public function addSubscriber(EventSubscriberInterface $subscriber)
{
$this->dispatcher->addSubscriber($subscriber);
}
public function removeListener($eventName, $listener)
{
$this->dispatcher->removeListener($eventName, $listener);
}
public function removeSubscriber(EventSubscriberInterface $subscriber)
{
$this->dispatcher->removeSubscriber($subscriber);
}
public function getListeners($eventName = null)
{
return $this->dispatcher->getListeners($eventName);
}
public function hasListeners($eventName = null)
{
return $this->dispatcher->hasListeners($eventName);
}
public function trigger_event($eventName, $data = array())
{
$event = new phpbb_event_data($data);
$this->dispatch($eventName, $event);
return $event->get_data_filtered(array_keys($data));
}
}