1
0
Fork 0

Add an EventSubscriberInterface which may also be implemented by plugins

pull/2179/head
Nils Adermann 2013-08-14 18:27:54 +02:00
parent 3960edd64e
commit 919a190153
4 changed files with 52 additions and 6 deletions

View File

@ -12,9 +12,6 @@
namespace Composer\EventDispatcher; namespace Composer\EventDispatcher;
use Composer\Composer;
use Composer\IO\IOInterface;
/** /**
* The base event class * The base event class
* *

View File

@ -170,7 +170,7 @@ class EventDispatcher
$this->listeners[$eventName][$priority][] = $listener; $this->listeners[$eventName][$priority][] = $listener;
} }
protected function addSubscriber($subscriber) public function addSubscriber(EventSubscriberInterface $subscriber)
{ {
foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { foreach ($subscriber->getSubscribedEvents() as $eventName => $params) {
if (is_string($params)) { if (is_string($params)) {

View File

@ -0,0 +1,48 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\EventDispatcher;
/**
* An EventSubscriber knows which events it is interested in.
*
* If an EventSubscriber is added to an EventDispatcher, the manager invokes
* {@link getSubscribedEvents} and registers the subscriber as a listener for all
* returned events.
*
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
* @author Jonathan Wage <jonwage@gmail.com>
* @author Roman Borschel <roman@code-factory.org>
* @author Bernhard Schussek <bschussek@gmail.com>
*/
interface EventSubscriberInterface
{
/**
* Returns an array of event names this subscriber wants to listen to.
*
* The array keys are event names and the value can be:
*
* * The method name to call (priority defaults to 0)
* * An array composed of the method name to call and the priority
* * An array of arrays composed of the method names to call and respective
* priorities, or 0 if unset
*
* For instance:
*
* * array('eventName' => 'methodName')
* * array('eventName' => array('methodName', $priority))
* * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
*
* @return array The event names to listen to
*/
public static function getSubscribedEvents();
}

View File

@ -13,6 +13,7 @@
namespace Composer\Plugin; namespace Composer\Plugin;
use Composer\Composer; use Composer\Composer;
use Composer\EventDispatcher\EventSubscriberInterface;
use Composer\Package\Package; use Composer\Package\Package;
use Composer\IO\IOInterface; use Composer\IO\IOInterface;
use Composer\Package\PackageInterface; use Composer\Package\PackageInterface;
@ -65,8 +66,8 @@ class PluginManager
$this->plugins[] = $plugin; $this->plugins[] = $plugin;
$plugin->activate($this->composer); $plugin->activate($this->composer);
if ($plugin instanceof \Symfony\Component\EventDispatcher\EventSubscriberInterface) { if ($plugin instanceof EventSubscriberInterface) {
$this->composer->getPluginEventDispatcher()->addSubscriber($plugin); $this->composer->getEventDispatcher()->addSubscriber($plugin);
} }
} }