[ticket/12016] Use a service provider for event listeners

This allows them to use dependency injection

PHPBB3-12016
This commit is contained in:
Joas Schilling 2013-11-13 17:34:06 +01:00
parent cfb0a41030
commit d3f9a51709
2 changed files with 16 additions and 13 deletions

View file

@ -140,10 +140,17 @@ services:
class: phpbb\event\extension_subscriber_loader
arguments:
- @dispatcher
- @ext.manager
- @event.listener_collection
calls:
- [load, []]
event.listener_collection:
class: phpbb\di\service_collection
arguments:
- @service_container
tags:
- { name: service_collection, tag: event.listener }
ext.manager:
class: phpbb\extension\manager
arguments:

View file

@ -14,26 +14,22 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class extension_subscriber_loader
{
private $dispatcher;
private $extension_manager;
private $listener_collection;
public function __construct(EventDispatcherInterface $dispatcher, \phpbb\extension\manager $extension_manager)
public function __construct(EventDispatcherInterface $dispatcher, \phpbb\di\service_collection $listener_collection)
{
$this->dispatcher = $dispatcher;
$this->extension_manager = $extension_manager;
$this->listener_collection = $listener_collection;
}
public function load()
{
$finder = $this->extension_manager->get_finder();
$subscriber_classes = $finder
->extension_directory('/event')
->core_path('event/')
->get_classes();
foreach ($subscriber_classes as $class)
if (!empty($this->listener_collection))
{
$subscriber = new $class();
$this->dispatcher->addSubscriber($subscriber);
foreach ($this->listener_collection as $listener)
{
$this->dispatcher->addSubscriber($listener);
}
}
}
}