mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-12 22:38:52 +00:00
[feature/event-dispatcher] Change phpbb_event_dispatcher to inheritance, tests
PHPBB3-9550
This commit is contained in:
parent
935a4abb7e
commit
400277c036
4 changed files with 72 additions and 89 deletions
|
@ -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 phpbb_event_dispatcher_wrapper(new EventDispatcher());
|
$phpbb_dispatcher = new phpbb_event_dispatcher();
|
||||||
$request = new phpbb_request();
|
$request = new phpbb_request();
|
||||||
$user = new user();
|
$user = new user();
|
||||||
$auth = new auth();
|
$auth = new auth();
|
||||||
|
|
42
phpBB/includes/event/dispatcher.php
Normal file
42
phpBB/includes/event/dispatcher.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?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\EventDispatcher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension of the Symfony2 EventDispatcher
|
||||||
|
*
|
||||||
|
* 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)));
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class phpbb_event_dispatcher extends EventDispatcher
|
||||||
|
{
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,88 +0,0 @@
|
||||||
<?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));
|
|
||||||
}
|
|
||||||
}
|
|
29
tests/event/dispatcher_test.php
Normal file
29
tests/event/dispatcher_test.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package testing
|
||||||
|
* @copyright (c) 2010 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class phpbb_event_dispatcher_test extends phpbb_test_case
|
||||||
|
{
|
||||||
|
public function test_trigger_event()
|
||||||
|
{
|
||||||
|
$dispatcher = new phpbb_event_dispatcher();
|
||||||
|
|
||||||
|
$dispatcher->addListener('core.test_event', function (phpbb_event_data $event) {
|
||||||
|
$event['foo'] = $event['foo'] . '2';
|
||||||
|
$event['bar'] = $event['bar'] . '2';
|
||||||
|
});
|
||||||
|
|
||||||
|
$foo = 'foo';
|
||||||
|
$bar = 'bar';
|
||||||
|
|
||||||
|
$vars = array('foo', 'bar');
|
||||||
|
$result = $dispatcher->trigger_event('core.test_event', compact($vars));
|
||||||
|
|
||||||
|
$this->assertSame(array('foo' => 'foo2', 'bar' => 'bar2'), $result);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue