瀏覽代碼

Add an EventSubscriberInterface which may also be implemented by plugins

Nils Adermann 12 年之前
父節點
當前提交
919a190153

+ 0 - 3
src/Composer/EventDispatcher/Event.php

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

+ 1 - 1
src/Composer/EventDispatcher/EventDispatcher.php

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

+ 48 - 0
src/Composer/EventDispatcher/EventSubscriberInterface.php

@@ -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();
+}

+ 3 - 2
src/Composer/Plugin/PluginManager.php

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