Merge pull request #1871 from nickvergessen/ticket/12016

Ticket/12016 Event listeners should be services
This commit is contained in:
Nils Adermann 2013-11-13 08:45:48 -08:00
commit e48b2c07eb
3 changed files with 25 additions and 13 deletions

View file

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

View file

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

View file

@ -4,3 +4,12 @@ services:
arguments: arguments:
- @controller.helper - @controller.helper
- @template - @template
foo_bar.listener.permission:
class: foo\bar\event\permission
tags:
- { name: event.listener }
foo_bar.listener.user_setup:
class: foo\bar\event\user_setup
tags:
- { name: event.listener }