mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-12 22:38:52 +00:00
[ticket/12016] Use a service provider for event listeners
This allows them to use dependency injection PHPBB3-12016
This commit is contained in:
parent
cfb0a41030
commit
d3f9a51709
2 changed files with 16 additions and 13 deletions
|
@ -140,10 +140,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:
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue