diff --git a/core/core.events.yml b/core/core.events.yml new file mode 100644 index 0000000..aca421e --- /dev/null +++ b/core/core.events.yml @@ -0,0 +1,86 @@ +subscribers: + config.importer.import: + - callback: config_snapshot_subscriber:onConfigImporterImport + priority: 40 + config.importer.validate: + - callback: Drupal\Core\EventSubscriber\ConfigImportSubscriber::onConfigImporterValidate + priority: 40 + config.save: + - callback: config.factory:onConfigSave + priority: 255 + kernel.request: + # Priority must be higher than LanguageRequestSubscriber as LanguageManager + # access global $user in case language module enabled. + - callback: authentication_subscriber:onKernelRequestAuthenticate + priority: 300 + - callback: path_subscriber:onKernelRequestConvertPath + priority: 200 + - callback: Drupal\Core\EventSubscriber\LegacyRequestSubscriber::onKernelRequestLegacy + priority: 90 + - callback: Drupal\Core\Ajax\AjaxSubscriber::onKernelRequest + priority: 50 + - callback: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestDetermineSiteStatus + priority: 40 + - callback: router_listener:onKernelRequest + priority: 32 + - callback: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance + priority: 30 + - callback: Drupal\Core\EventSubscriber\LegacyRequestSubscriber::onKernelRequestLegacyAfterRouting + priority: 30 + - callback: access_subscriber:onKernelRequestAccessCheck + priority: 30 + - callback: reverse_proxy_subscriber:onKernelRequestReverseProxyCheck + priority: 10 + - slave_database_ignore__subscriber:checkSlaveServer + - router.route_preloader:onRequest + kernel.response: + - finish_response_subscriber:onRespond + - redirect_response_subscriber:checkRedirectUrl + - authentication_subscriber:onRespond + - callback: Drupal\Core\EventSubscriber\AjaxResponseSubscriber::onResponse + priority: -100 + kernel.exception: + - callback: exception_listener:onKernelException + priority: -128 + - authentication_subscriber:onException + - route_enhancer.param_conversion:onException + kernel.view: + - callback: html_view_subscriber:onHtmlFragment + priority: 100 + - callback: html_view_subscriber:onHtmlPage + priority: 50 + - view_subscriber:onView + kernel.finish_request: + - router_listener:onKernelFinishRequest + kernel.terminate: + - callback: path_subscriber:onKernelTerminate + priority: 200 + - callback: request_close_subscriber:onTerminate + priority: 100 + - callback: kernel_destruct_subscriber:onKernelTerminate + priority: 100 + - callback: router.rebuild_subscriber:onKernelTerminate + priority: 200 + routing.route_alter: + - callback: Drupal\Core\EventSubscriber\RouteMethodSubscriber::onRouteBuilding + priority: 5000 + - route_subscriber.module:onAlterRoutes + - Drupal\Core\EventSubscriber\SpecialAttributesRouteSubscriber::onAlterRoutes + - callback: route_subscriber.entity:onRoutingRouteAlterSetType + priority: -150 + - callback: paramconverter_subscriber:onRoutingRouteAlterSetParameterConverters + priority: -200 + - callback: access_route_subscriber:onRoutingRouteAlterSetAccessCheck + # Setting very low priority to ensure access checks are run after alters. + priority: -1000 + # Set a really low priority to catch as many as possible routes. + - callback: router.route_preloader:onAlterRoutes + priority: -1024 + - callback: router.path_roots_subscriber:onRouteAlter + priority: -1024 + routing.route_finished: + - router.route_provider:reset + - router.route_preloader:onFinishedRoutes + - router.path_roots_subscriber:onRouteFinished + - callback: router.rebuild_subscriber:onRouterRebuild + priority: 200 diff --git a/core/core.services.yml b/core/core.services.yml index 32881da..b42b6a7 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -93,8 +93,6 @@ services: arguments: ['@config.cachedstorage.storage', '@cache.config'] config.factory: class: Drupal\Core\Config\ConfigFactory - tags: - - { name: event_subscriber } arguments: ['@config.storage', '@event_dispatcher', '@config.typed'] config.installer: class: Drupal\Core\Config\ConfigInstaller @@ -301,13 +299,9 @@ services: router.route_provider: class: Drupal\Core\Routing\RouteProvider arguments: ['@database', '@router.builder'] - tags: - - { name: event_subscriber } router.route_preloader: class: Drupal\Core\Routing\RoutePreloader arguments: ['@router.route_provider', '@state', '@content_negotiation'] - tags: - - { name: 'event_subscriber' } router.matcher.final_matcher: class: Drupal\Core\Routing\UrlMatcher router.matcher: @@ -335,8 +329,6 @@ services: router.path_roots_subscriber: class: Drupal\Core\EventSubscriber\PathRootsSubscriber arguments: ['@state'] - tags: - - { name: event_subscriber } entity.query: class: Drupal\Core\Entity\Query\QueryFactory arguments: ['@entity.manager'] @@ -357,8 +349,6 @@ services: router.rebuild_subscriber: class: Drupal\Core\EventSubscriber\RouterRebuildSubscriber arguments: ['@router.builder', '@lock'] - tags: - - { name: event_subscriber } path.alias_manager.cached: class: Drupal\Core\CacheDecorator\AliasManagerCacheDecorator arguments: ['@path.alias_manager', '@cache.path'] @@ -389,8 +379,6 @@ services: - [setContainer, ['@service_container']] paramconverter_subscriber: class: Drupal\Core\EventSubscriber\ParamConverterSubscriber - tags: - - { name: event_subscriber } arguments: ['@paramconverter_manager'] paramconverter.entity: class: Drupal\Core\ParamConverter\EntityConverter @@ -399,29 +387,18 @@ services: arguments: ['@entity.manager'] route_subscriber.module: class: Drupal\Core\EventSubscriber\ModuleRouteSubscriber - tags: - - { name: event_subscriber } arguments: ['@module_handler'] route_subscriber.entity: class: Drupal\Core\EventSubscriber\EntityRouteAlterSubscriber - tags: - - { name: event_subscriber } arguments: ['@entity.manager'] reverse_proxy_subscriber: class: Drupal\Core\EventSubscriber\ReverseProxySubscriber - tags: - - { name: event_subscriber } arguments: ['@settings'] - ajax_response_subscriber: - class: Drupal\Core\EventSubscriber\AjaxResponseSubscriber - tags: - - { name: event_subscriber } route_enhancer.param_conversion: class: Drupal\Core\Routing\Enhancer\ParamConversionEnhancer arguments: ['@paramconverter_manager'] tags: - { name: route_enhancer } - - { name: event_subscriber } route_enhancer.authentication: class: Drupal\Core\Routing\Enhancer\AuthenticationEnhancer calls: @@ -450,14 +427,6 @@ services: arguments: ['@service_container', '@controller_resolver', '@form_builder'] tags: - { name: route_enhancer, priority: 10 } - route_special_attributes_subscriber: - class: Drupal\Core\EventSubscriber\SpecialAttributesRouteSubscriber - tags: - - { name: event_subscriber } - route_http_method_subscriber: - class: Drupal\Core\EventSubscriber\RouteMethodSubscriber - tags: - - { name: event_subscriber } controller.page: class: Drupal\Core\Controller\HtmlPageController arguments: ['@controller_resolver', '@string_translation', '@title_resolver'] @@ -474,20 +443,14 @@ services: class: Drupal\Core\Ajax\AjaxResponseRenderer router_listener: class: Symfony\Component\HttpKernel\EventListener\RouterListener - tags: - - { name: event_subscriber } arguments: ['@router'] content_negotiation: class: Drupal\Core\ContentNegotiation view_subscriber: class: Drupal\Core\EventSubscriber\ViewSubscriber - tags: - - { name: event_subscriber } arguments: ['@content_negotiation', '@title_resolver', '@ajax_response_renderer'] html_view_subscriber: class: Drupal\Core\EventSubscriber\HtmlViewSubscriber - tags: - - { name: event_subscriber } arguments: ['@html_fragment_renderer', '@html_page_renderer'] html_fragment_renderer: class: Drupal\Core\Page\DefaultHtmlFragmentRenderer @@ -513,12 +476,8 @@ services: arguments: ['@access_manager', '@current_user'] calls: - [setCurrentUser, ['@?current_user']] - tags: - - { name: event_subscriber } access_route_subscriber: class: Drupal\Core\EventSubscriber\AccessRouteSubscriber - tags: - - { name: event_subscriber } arguments: ['@access_manager'] access_check.default: class: Drupal\Core\Access\DefaultAccessCheck @@ -547,44 +506,24 @@ services: tags: - { name: access_check, applies_to: _csrf_token } arguments: ['@csrf_token'] - maintenance_mode_subscriber: - class: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber - tags: - - { name: event_subscriber } path_subscriber: class: Drupal\Core\EventSubscriber\PathSubscriber - tags: - - { name: event_subscriber } arguments: ['@path.alias_manager.cached', '@path_processor_manager'] legacy_request_subscriber: class: Drupal\Core\EventSubscriber\LegacyRequestSubscriber - tags: - - { name: event_subscriber } finish_response_subscriber: class: Drupal\Core\EventSubscriber\FinishResponseSubscriber - tags: - - { name: event_subscriber } arguments: ['@language_manager'] scope: request redirect_response_subscriber: class: Drupal\Core\EventSubscriber\RedirectResponseSubscriber arguments: ['@url_generator'] - tags: - - { name: event_subscriber } scope: request request_close_subscriber: class: Drupal\Core\EventSubscriber\RequestCloseSubscriber - tags: - - { name: event_subscriber } arguments: ['@module_handler'] - config_import_subscriber: - class: Drupal\Core\EventSubscriber\ConfigImportSubscriber - tags: - - { name: event_subscriber } config_snapshot_subscriber: class: Drupal\Core\EventSubscriber\ConfigSnapshotSubscriber - tags: - - { name: event_subscriber } arguments: ['@config.manager', '@config.storage', '@config.storage.snapshot'] exception_controller: class: Drupal\Core\Controller\ExceptionController @@ -593,8 +532,6 @@ services: - [setContainer, ['@service_container']] exception_listener: class: Drupal\Core\EventSubscriber\ExceptionListener - tags: - - { name: event_subscriber } arguments: [['@exception_controller', execute]] route_processor_manager: class: Drupal\Core\RouteProcessor\RouteProcessorManager @@ -634,14 +571,8 @@ services: parent: default_plugin_manager kernel_destruct_subscriber: class: Drupal\Core\EventSubscriber\KernelDestructionSubscriber - tags: - - { name: event_subscriber } calls: - [setContainer, ['@service_container']] - ajax.subscriber: - class: Drupal\Core\Ajax\AjaxSubscriber - tags: - - { name: event_subscriber } image.toolkit.manager: class: Drupal\Core\ImageToolkit\ImageToolkitManager arguments: ['@container.namespaces', '@cache.cache', '@language_manager', '@config.factory', '@module_handler'] @@ -659,8 +590,6 @@ services: arguments: ['@database'] slave_database_ignore__subscriber: class: Drupal\Core\EventSubscriber\SlaveDatabaseIgnoreSubscriber - tags: - - {name: event_subscriber} country_manager: class: Drupal\Core\Locale\CountryManager arguments: ['@module_handler'] @@ -734,8 +663,6 @@ services: - { name: authentication_provider, priority: 0 } authentication_subscriber: class: Drupal\Core\EventSubscriber\AuthenticationSubscriber - tags: - - { name: event_subscriber } arguments: ['@authentication'] current_user: class: Drupal\Core\Session\AccountInterface diff --git a/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php b/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php index f298d88..06d0da0 100644 --- a/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php +++ b/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php @@ -7,9 +7,7 @@ namespace Drupal\Core\Ajax; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Subscribes to the kernel request event to add the Ajax media type. @@ -17,7 +15,7 @@ * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event * The event to process. */ -class AjaxSubscriber implements EventSubscriberInterface { +class AjaxSubscriber { /** * Registers Ajax formats with the Request class. @@ -29,15 +27,4 @@ public function onKernelRequest(GetResponseEvent $event) { $request->setFormat('drupal_modal', 'application/vnd.drupal-modal'); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents(){ - $events[KernelEvents::REQUEST][] = array('onKernelRequest', 50); - return $events; - } - } \ No newline at end of file diff --git a/core/lib/Drupal/Core/Config/ConfigFactory.php b/core/lib/Drupal/Core/Config/ConfigFactory.php index 2703646..8e5eaff 100644 --- a/core/lib/Drupal/Core/Config/ConfigFactory.php +++ b/core/lib/Drupal/Core/Config/ConfigFactory.php @@ -27,7 +27,7 @@ * * @see \Drupal\Core\Config\StorageInterface */ -class ConfigFactory implements ConfigFactoryInterface, EventSubscriberInterface { +class ConfigFactory implements ConfigFactoryInterface { /** * A storage controller instance for reading and writing configuration data. @@ -399,14 +399,6 @@ public function onConfigSave(ConfigCrudEvent $event) { /** * {@inheritdoc} */ - static function getSubscribedEvents() { - $events[ConfigEvents::SAVE][] = array('onConfigSave', 255); - return $events; - } - - /** - * {@inheritdoc} - */ public function addOverride(ConfigFactoryOverrideInterface $config_factory_override) { $this->configFactoryOverrides[] = $config_factory_override; } diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php index 01ab877..df67ac1 100644 --- a/core/lib/Drupal/Core/CoreServiceProvider.php +++ b/core/lib/Drupal/Core/CoreServiceProvider.php @@ -63,6 +63,7 @@ public function register(ContainerBuilder $container) { $container->addCompilerPass(new RegisterRouteFiltersPass()); // Add a compiler pass for registering event subscribers. $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING); + $container->addCompilerPass(new EventListenerPass(), PassConfig::TYPE_AFTER_REMOVING); $container->addCompilerPass(new RegisterAccessChecksPass()); // Add a compiler pass for upcasting route parameters. $container->addCompilerPass(new RegisterParamConvertersPass()); diff --git a/core/lib/Drupal/Core/EventListenerPass.php b/core/lib/Drupal/Core/EventListenerPass.php new file mode 100644 index 0000000..a107396 --- /dev/null +++ b/core/lib/Drupal/Core/EventListenerPass.php @@ -0,0 +1,228 @@ +hasDefinition('event_dispatcher')) { + return; + } + + $event_dispatcher_definition = $container->getDefinition('event_dispatcher'); + $module_handler = $container->get('module_handler'); + + $this->findListeners($container, $event_dispatcher_definition, $module_handler); + } + + /** + * Find the event listeners in event.yml files and add it to the container. + * + * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container + * The container to add event services to. + * @param \Symfony\Component\DependencyInjection\Definition $event_dispatcher_definition + * The event dispatcher service definition. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler to get the module directories from. + */ + protected function findListeners(ContainerBuilder $container, Definition $event_dispatcher_definition, ModuleHandlerInterface $module_handler) { + foreach ($this->getYamlDiscovery($module_handler)->findAll() as $info) { + foreach ((array) $info['subscribers'] as $event_id => $listeners) { + foreach ((array) $listeners as $listener) { + if ($result = $this->prepareListener($container, $event_id, $listener)) { + list($add_method, $args) = $result; + $event_dispatcher_definition->addMethodCall($add_method, $args); + } + } + } + } + } + + /** + * Creates the needed listener information to pass onto the event dispatcher. + * + * This method uses a single listener information, determines whether it is + * a service, method or just class, method. + * + * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container + * The container to add event services to. + * @param string $event_id + * The used event. + * @param array $listener + * The parsed listener array. + * + * @return array + * An array containing 'addListenerService' and the needed arguments for + * $definition->addMethodCall. + */ + protected function prepareListener(ContainerBuilder $container, $event_id, $listener) { + if (is_array($listener)) { + $callback = $listener['callback']; + if (isset($listener['priority'])) { + $priority = $listener['priority']; + } + } + else { + $callback = $listener; + } + + if (!($callback_parts = $this->parseCallback($callback, $container))) { + return; + } + $method = $callback_parts['method']; + + if (isset($callback_parts['class'])) { + $callback_parts['service'] = $this->defineService($container, $callback_parts['class']); + } + $args = array($event_id, array($callback_parts['service'], $method)); + $add_method = 'addListenerService'; + + if (isset($priority)) { + $args[] = $priority; + } + return array($add_method, $args); + } + + /** + * Registers a new service without any dependency. + * + * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container + * The container builder. + * + * @param string $class + * The class of the new service. + * + * @return string + * The name of the new service. + */ + protected function defineService(ContainerBuilder $container, $class) { + $definition = new Definition(); + $definition->setClass($class); + $name = 'event_listener.' . str_replace("\\", '.', $class); + $container->setDefinition($name, $definition); + return $name; + } + + /** + * Parses a single callback and converts it a php array. + * + * @param string $callback + * The listener string which is part of the events.yml file. + * + * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container + * The container builder. + * + * @throws \UnexpectedValueException + * Thrown when the callback could not be parsed. + * @throws \InvalidArgumentException + * Thrown when the class/service does not exists. + * + * @return array + * An array with the following keys: + * - service: The name of the service of the listener OR + * - class: The name of the class of the listener + * - method: The method name of the listener + */ + protected function parseCallback($callback, ContainerBuilder $container) { + // @TODO: Maybe use https://drupal.org/node/2165475 instead. + $optional = $callback[0] == '?'; + + // Callback in the service:method notation. + $count = substr_count($callback, ':'); + if ($count == 1) { + list($service, $method) = explode(':', $callback, 2); + if ($optional) { + $service = substr($service, 1); + } + + if (!$container->has($service)) { + if ($optional) { + return array(); + } + else { + throw new \InvalidArgumentException(sprintf('Service "%s" does not exist.', $service)); + } + } + + return array('service' => $service, 'method' => $method); + } + + // Callback in the class::method notation. + if (strpos($callback, '::') !== FALSE) { + list($class, $method) = explode('::', $callback, 2); + if ($optional) { + $class = substr($class, 1); + } + + if (!class_exists($class)) { + if ($optional) { + return array(); + } + else { + throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class)); + } + } + return array('class' => $class, 'method' => $method); + } + else { + throw new \UnexpectedValueException(sprintf('Unable to parse the callback name "%s".', $callback)); + } + } + + /** + * Returns the YAML discovery for getting all the .routing.yml files. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + * + * @return \Drupal\Component\Discovery\YamlDiscovery + * The yaml discovery. + */ + protected function getYamlDiscovery(ModuleHandlerInterface $module_handler) { + if (!isset($this->yamlDiscovery)) { + $this->yamlDiscovery = new YamlDiscovery('events', array('core' => DRUPAL_ROOT . '/core') + $module_handler->getModuleDirectories()); + } + return $this->yamlDiscovery; + } + +} + diff --git a/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php index dee7d32..61999a5 100644 --- a/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/AccessRouteSubscriber.php @@ -9,13 +9,11 @@ use Drupal\Core\Access\AccessManager; use Drupal\Core\Routing\RouteBuildEvent; -use Drupal\Core\Routing\RoutingEvents; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Provides a subscriber to set access checkers on route building. */ -class AccessRouteSubscriber implements EventSubscriberInterface { +class AccessRouteSubscriber { /** * The access manager. @@ -45,17 +43,4 @@ public function onRoutingRouteAlterSetAccessCheck(RouteBuildEvent $event) { $this->accessManager->setChecks($event->getRouteCollection()); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - // Setting very low priority to ensure access checks are run after alters. - $events[RoutingEvents::ALTER][] = array('onRoutingRouteAlterSetAccessCheck', -1000); - - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php index 0c31999..4f2aecb 100644 --- a/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php @@ -10,16 +10,13 @@ use Drupal\Core\Access\AccessManager; use Drupal\Core\Session\AccountInterface; use Symfony\Cmf\Component\Routing\RouteObjectInterface; -use Symfony\Component\HttpKernel\KernelEvents; -use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; /** * Access subscriber for controller requests. */ -class AccessSubscriber implements EventSubscriberInterface { +class AccessSubscriber { /** * The current user. @@ -98,16 +95,4 @@ public function setCurrentUser(AccountInterface $current_user = NULL) { $this->currentUser = $current_user; } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestAccessCheck', 30); - - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/AjaxResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AjaxResponseSubscriber.php index cf4dca1..1fe3a6a 100644 --- a/core/lib/Drupal/Core/EventSubscriber/AjaxResponseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/AjaxResponseSubscriber.php @@ -8,12 +8,9 @@ namespace Drupal\Core\EventSubscriber; use Drupal\Core\Ajax\AjaxResponse; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\HttpKernel\KernelEvents; -class AjaxResponseSubscriber implements EventSubscriberInterface { +class AjaxResponseSubscriber { /** * Renders the ajax commands right before preparing the result. @@ -28,13 +25,4 @@ public function onResponse(FilterResponseEvent $event) { } } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events[KernelEvents::RESPONSE][] = array('onResponse', -100); - - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php index a2aa7d8..91041cf 100644 --- a/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php @@ -9,18 +9,16 @@ use Drupal\Core\Authentication\AuthenticationProviderInterface; use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Authentication subscriber. * * Trigger authentication and cleanup during the request. */ -class AuthenticationSubscriber implements EventSubscriberInterface { +class AuthenticationSubscriber { /** * Authentication provider. @@ -74,20 +72,4 @@ public function onException(GetResponseForExceptionEvent $event) { } } - /** - * {@inheritdoc} - * - * The priority for request must be higher than the highest event subscriber - * accessing the current user. - * The priority for the response must be as low as possible allowing e.g the - * Cookie provider to send all relevant session data to the user. - */ - public static function getSubscribedEvents() { - // Priority must be higher than LanguageRequestSubscriber as LanguageManager - // access current user in case language module enabled. - $events[KernelEvents::REQUEST][] = array('onKernelRequestAuthenticate', 300); - $events[KernelEvents::RESPONSE][] = array('onRespond', 0); - $events[KernelEvents::EXCEPTION][] = array('onException', 0); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php index 75f06d4..bcaa4e7 100644 --- a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php @@ -16,7 +16,7 @@ /** * Config import subscriber for config import events. */ -class ConfigImportSubscriber implements EventSubscriberInterface { +class ConfigImportSubscriber { /** * Validates the configuration to be imported. @@ -34,15 +34,4 @@ public function onConfigImporterValidate(ConfigImporterEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[ConfigEvents::IMPORT_VALIDATE][] = array('onConfigImporterValidate', 40); - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigSnapshotSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigSnapshotSubscriber.php index a8d0e06..0cff3b0 100644 --- a/core/lib/Drupal/Core/EventSubscriber/ConfigSnapshotSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/ConfigSnapshotSubscriber.php @@ -16,7 +16,7 @@ /** * Create a snapshot when config is imported. */ -class ConfigSnapshotSubscriber implements EventSubscriberInterface { +class ConfigSnapshotSubscriber { /** * The configuration manager. @@ -63,15 +63,4 @@ public function onConfigImporterImport(ConfigImporterEvent $event) { $this->configManager->createSnapshot($this->sourceStorage, $this->snapshotStorage); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[ConfigEvents::IMPORT][] = array('onConfigImporterImport', 40); - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php index 6283dae..dcefa99 100644 --- a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php @@ -8,7 +8,6 @@ namespace Drupal\Core\EventSubscriber; use Drupal\Core\Entity\EntityManagerInterface; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Drupal\Core\Routing\RoutingEvents; use Drupal\Core\Routing\RouteBuildEvent; @@ -23,7 +22,7 @@ * kind of PHP variable (e.g., a type hinted interface) the controller * requires: https://drupal.org/node/2041907. */ -class EntityRouteAlterSubscriber implements EventSubscriberInterface { +class EntityRouteAlterSubscriber { /** * Entity manager. @@ -68,11 +67,4 @@ public function onRoutingRouteAlterSetType(RouteBuildEvent $event) { } } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - $events[RoutingEvents::ALTER][] = array('onRoutingRouteAlterSetType', -150); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php index 8e4596f..0fbd04a 100644 --- a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php @@ -10,14 +10,12 @@ use Drupal\Core\Language\Language; use Drupal\Core\Language\LanguageManager; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Response subscriber to handle finished responses. */ -class FinishResponseSubscriber implements EventSubscriberInterface { +class FinishResponseSubscriber { /** * The LanguageManager object for retrieving the correct language code. @@ -110,14 +108,4 @@ public function onRespond(FilterResponseEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::RESPONSE][] = array('onRespond'); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/HtmlViewSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/HtmlViewSubscriber.php index 69e80cd..68d0a3d 100644 --- a/core/lib/Drupal/Core/EventSubscriber/HtmlViewSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/HtmlViewSubscriber.php @@ -19,7 +19,7 @@ /** * Main subscriber for Html-page responses. */ -class HtmlViewSubscriber implements EventSubscriberInterface { +class HtmlViewSubscriber { /** * The fragment rendering service. @@ -92,17 +92,4 @@ public function onHtmlPage(GetResponseForControllerResultEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::VIEW][] = array('onHtmlFragment', 100); - $events[KernelEvents::VIEW][] = array('onHtmlPage', 50); - - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/KernelDestructionSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/KernelDestructionSubscriber.php index e71f5ca..240c8a8 100644 --- a/core/lib/Drupal/Core/EventSubscriber/KernelDestructionSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/KernelDestructionSubscriber.php @@ -8,14 +8,12 @@ namespace Drupal\Core\EventSubscriber; use Symfony\Component\DependencyInjection\ContainerAware; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\PostResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; /** * Destructs services that are initiated and tagged with "needs_destruction". */ -class KernelDestructionSubscriber extends ContainerAware implements EventSubscriberInterface { +class KernelDestructionSubscriber extends ContainerAware { /** * Holds an array of service ID's that will require destruction. @@ -54,14 +52,4 @@ public function onKernelTerminate(PostResponseEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::TERMINATE][] = array('onKernelTerminate', 100); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php index 93bfb42..f6c61ce 100644 --- a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php @@ -9,14 +9,12 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Maintenance mode subscriber for controller requests. */ -class MaintenanceModeSubscriber implements EventSubscriberInterface { +class MaintenanceModeSubscriber { /** * Determine whether the page is configured to be offline. @@ -58,14 +56,4 @@ public function onKernelRequestMaintenance(GetResponseEvent $event) { } } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - // In order to change the maintenance status an event subscriber with a - // priority between 30 and 40 should be added. - $events[KernelEvents::REQUEST][] = array('onKernelRequestDetermineSiteStatus', 40); - $events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 30); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php index b89e9ff..398727d 100644 --- a/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php @@ -9,13 +9,12 @@ use Drupal\Core\ParamConverter\ParamConverterManagerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Drupal\Core\Routing\RoutingEvents; use Drupal\Core\Routing\RouteBuildEvent; /** * Event subscriber for registering parameter converters with routes. */ -class ParamConverterSubscriber implements EventSubscriberInterface { +class ParamConverterSubscriber { /** * The parameter converter manager. @@ -45,11 +44,4 @@ public function onRoutingRouteAlterSetParameterConverters(RouteBuildEvent $event $this->paramConverterManager->setRouteParameterConverters($event->getRouteCollection()); } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - $events[RoutingEvents::ALTER][] = array('onRoutingRouteAlterSetParameterConverters', -200); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php index f2701bc..de28469 100644 --- a/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/PathRootsSubscriber.php @@ -9,14 +9,12 @@ use Drupal\Core\KeyValueStore\StateInterface; use Drupal\Core\Routing\RouteBuildEvent; -use Drupal\Core\Routing\RoutingEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Routing\RouteCollection; /** * Provides all available first bits of all route paths. */ -class PathRootsSubscriber implements EventSubscriberInterface { +class PathRootsSubscriber { /** * Stores the path roots available in the router. @@ -67,15 +65,4 @@ public function onRouteFinished() { unset($this->pathRoots); } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events = array(); - // Try to set a low priority to ensure that all routes are already added. - $events[RoutingEvents::ALTER][] = array('onRouteAlter', -1024); - $events[RoutingEvents::FINISHED][] = array('onRouteFinished'); - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php index 09aceb6..53e030f 100644 --- a/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php @@ -10,15 +10,13 @@ use Drupal\Core\Path\AliasManagerInterface; use Drupal\Core\PathProcessor\InboundPathProcessorInterface; use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\Event\PostResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Provides a path subscriber that converts path aliases. */ -class PathSubscriber extends PathListenerBase implements EventSubscriberInterface { +class PathSubscriber extends PathListenerBase { /** * The alias manager that caches alias lookups based on the request. @@ -70,15 +68,4 @@ public function onKernelTerminate(PostResponseEvent $event) { $this->aliasManager->writeCache(); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestConvertPath', 200); - $events[KernelEvents::TERMINATE][] = array('onKernelTerminate', 200); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php index 6cc7916..bfc20c0 100644 --- a/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php @@ -8,16 +8,13 @@ namespace Drupal\Core\EventSubscriber; use Drupal\Core\Routing\UrlGeneratorInterface; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Allows manipulation of the response object when performing a redirect. */ -class RedirectResponseSubscriber implements EventSubscriberInterface { +class RedirectResponseSubscriber { /** * The url generator service. @@ -39,7 +36,7 @@ public function __construct(UrlGeneratorInterface $url_generator) { /** * Allows manipulation of the response object when performing a redirect. * - * @param Symfony\Component\HttpKernel\Event\FilterResponseEvent $event + * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event * The Event to process. */ public function checkRedirectUrl(FilterResponseEvent $event) { @@ -68,14 +65,4 @@ public function checkRedirectUrl(FilterResponseEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::RESPONSE][] = array('checkRedirectUrl'); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php index 764635e..8b57bb2 100644 --- a/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php @@ -9,14 +9,12 @@ use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Extension\CachedModuleHandlerInterface; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\PostResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Subscriber for all responses. */ -class RequestCloseSubscriber implements EventSubscriberInterface { +class RequestCloseSubscriber { /** * @var \Drupal\Core\Extension\ModuleHandlerInterface @@ -48,15 +46,4 @@ public function onTerminate(PostResponseEvent $event) { system_run_automated_cron(); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::TERMINATE][] = array('onTerminate', 100); - - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/ReverseProxySubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ReverseProxySubscriber.php index cf0003d..f963ed2 100644 --- a/core/lib/Drupal/Core/EventSubscriber/ReverseProxySubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/ReverseProxySubscriber.php @@ -7,7 +7,6 @@ namespace Drupal\Core\EventSubscriber; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Drupal\Component\Utility\Settings; @@ -15,7 +14,7 @@ /** * Reverse proxy subscriber for controller requests. */ -class ReverseProxySubscriber implements EventSubscriberInterface { +class ReverseProxySubscriber { /** * A settings object. @@ -50,14 +49,4 @@ public function onKernelRequestReverseProxyCheck(GetResponseEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestReverseProxyCheck', 10); - return $events; - } } diff --git a/core/lib/Drupal/Core/EventSubscriber/RouterRebuildSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RouterRebuildSubscriber.php index 98bf05c..776f87c 100644 --- a/core/lib/Drupal/Core/EventSubscriber/RouterRebuildSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/RouterRebuildSubscriber.php @@ -10,16 +10,14 @@ use Drupal\Core\Cache\Cache; use Drupal\Core\Lock\LockBackendInterface; use Drupal\Core\Routing\RouteBuilderInterface; -use Drupal\Core\Routing\RoutingEvents; use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\PostResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; /** * Rebuilds the default menu links and runs menu-specific code if necessary. */ -class RouterRebuildSubscriber implements EventSubscriberInterface { +class RouterRebuildSubscriber { /** * @var \Drupal\Core\Routing\RouteBuilderInterface @@ -93,16 +91,4 @@ protected function menuLinksRebuild() { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::TERMINATE][] = array('onKernelTerminate', 200); - $events[RoutingEvents::FINISHED][] = array('onRouterRebuild', 200); - return $events; - } - } diff --git a/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php index e10ce04..4568adc 100644 --- a/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/SlaveDatabaseIgnoreSubscriber.php @@ -8,14 +8,12 @@ namespace Drupal\Core\EventSubscriber; use Drupal\Core\Database\Database; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * System subscriber for controller requests. */ -class SlaveDatabaseIgnoreSubscriber implements EventSubscriberInterface { +class SlaveDatabaseIgnoreSubscriber { /** * Checks and disables the slave database server if appropriate. @@ -49,12 +47,4 @@ public function checkSlaveServer(GetResponseEvent $event) { } } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('checkSlaveServer'); - return $events; - } - } diff --git a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php index 48f057b..3a9117b 100644 --- a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php +++ b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php @@ -7,6 +7,7 @@ namespace Drupal\Core\ParamConverter; +use Drupal\Core\Routing\RouteBuildEvent; use Symfony\Component\DependencyInjection\ContainerAware; use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\Routing\RouteCollection; diff --git a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php index 614ac96..7e5698e 100644 --- a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php +++ b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php @@ -16,12 +16,11 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\HttpKernel\KernelEvents; /** * Provides a route enhancer that handles parameter conversion. */ -class ParamConversionEnhancer implements RouteEnhancerInterface, EventSubscriberInterface { +class ParamConversionEnhancer implements RouteEnhancerInterface { /** * The parameter conversion manager. @@ -82,12 +81,4 @@ public function onException(GetResponseForExceptionEvent $event) { } } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events[KernelEvents::EXCEPTION][] = array('onException', 0); - return $events; - } - } diff --git a/core/lib/Drupal/Core/Routing/RoutePreloader.php b/core/lib/Drupal/Core/Routing/RoutePreloader.php index daa4130..3fb2c54 100644 --- a/core/lib/Drupal/Core/Routing/RoutePreloader.php +++ b/core/lib/Drupal/Core/Routing/RoutePreloader.php @@ -10,9 +10,7 @@ use Drupal\Core\ContentNegotiation; use Drupal\Core\KeyValueStore\StateInterface; use Symfony\Component\EventDispatcher\Event; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\KernelEvent; -use Symfony\Component\HttpKernel\KernelEvents; /** * Defines a class which preloads non-admin routes. @@ -21,7 +19,7 @@ * list of all routes which most likely appear on the actual site, which are all * HTML routes not starting with "/admin". */ -class RoutePreloader implements EventSubscriberInterface { +class RoutePreloader { /** * The route provider. @@ -116,17 +114,4 @@ public function onFinishedRoutes(Event $event) { $this->nonAdminRoutesOnRebuild = array(); } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - // Set a really low priority to catch as many as possible routes. - $events[RoutingEvents::ALTER] = array('onAlterRoutes', -1024); - $events[RoutingEvents::FINISHED] = array('onFinishedRoutes'); - // Load the routes before the controller is executed (which happens after - // the kernel request event). - $events[KernelEvents::REQUEST][] = array('onRequest'); - return $events; - } - } diff --git a/core/lib/Drupal/Core/Routing/RouteProvider.php b/core/lib/Drupal/Core/Routing/RouteProvider.php index 20b0ec1..3d3b016 100644 --- a/core/lib/Drupal/Core/Routing/RouteProvider.php +++ b/core/lib/Drupal/Core/Routing/RouteProvider.php @@ -8,7 +8,6 @@ namespace Drupal\Core\Routing; use Drupal\Component\Utility\String; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Exception\RouteNotFoundException; use Symfony\Component\Routing\RouteCollection; @@ -19,7 +18,7 @@ /** * A Route Provider front-end for all Drupal-stored routes. */ -class RouteProvider implements RouteProviderInterface, EventSubscriberInterface { +class RouteProvider implements RouteProviderInterface { /** * The database connection from which to read route information. @@ -292,12 +291,4 @@ public function reset() { $this->routes = array(); } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - $events[RoutingEvents::FINISHED][] = array('reset'); - return $events; - } - } diff --git a/core/modules/ban/ban.events.yml b/core/modules/ban/ban.events.yml new file mode 100644 index 0000000..16d75ab --- /dev/null +++ b/core/modules/ban/ban.events.yml @@ -0,0 +1,4 @@ +subscribers: + kernel.request: + - callback: ban.subscriber:onKernelRequestBannedIpCheck + priority: 40 diff --git a/core/modules/ban/ban.services.yml b/core/modules/ban/ban.services.yml index 7f55ae6..42dab8a 100644 --- a/core/modules/ban/ban.services.yml +++ b/core/modules/ban/ban.services.yml @@ -4,6 +4,4 @@ services: arguments: ['@database'] ban.subscriber: class: Drupal\ban\EventSubscriber\BanSubscriber - tags: - - { name: event_subscriber } arguments: ['@ban.ip_manager'] diff --git a/core/modules/ban/lib/Drupal/ban/EventSubscriber/BanSubscriber.php b/core/modules/ban/lib/Drupal/ban/EventSubscriber/BanSubscriber.php index 47035ee..bf019e3 100644 --- a/core/modules/ban/lib/Drupal/ban/EventSubscriber/BanSubscriber.php +++ b/core/modules/ban/lib/Drupal/ban/EventSubscriber/BanSubscriber.php @@ -8,9 +8,7 @@ namespace Drupal\ban\EventSubscriber; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Drupal\ban\BanIpManager; use Drupal\Component\Utility\String; @@ -18,7 +16,7 @@ /** * Ban subscriber for controller requests. */ -class BanSubscriber implements EventSubscriberInterface { +class BanSubscriber { /** * The manager used to check the IP against. @@ -51,15 +49,4 @@ public function onKernelRequestBannedIpCheck(GetResponseEvent $event) { } } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestBannedIpCheck', 40); - return $events; - } - } diff --git a/core/modules/config_translation/config_translation.events.yml b/core/modules/config_translation/config_translation.events.yml new file mode 100644 index 0000000..754f1d5 --- /dev/null +++ b/core/modules/config_translation/config_translation.events.yml @@ -0,0 +1,2 @@ +subscribers: + diff --git a/core/modules/hal/hal.events.yml b/core/modules/hal/hal.events.yml new file mode 100644 index 0000000..8e820f1 --- /dev/null +++ b/core/modules/hal/hal.events.yml @@ -0,0 +1,4 @@ +subscribers: + kernel.request: + - callback: Drupal\hal\HalSubscriber::onKernelRequest + priority: 40 diff --git a/core/modules/hal/hal.services.yml b/core/modules/hal/hal.services.yml index f23f8b8..0c14cf7 100644 --- a/core/modules/hal/hal.services.yml +++ b/core/modules/hal/hal.services.yml @@ -26,7 +26,3 @@ services: class: Drupal\hal\Encoder\JsonEncoder tags: - { name: encoder, priority: 10, format: hal_json } - hal.subscriber: - class: Drupal\hal\HalSubscriber - tags: - - { name: event_subscriber } diff --git a/core/modules/hal/lib/Drupal/hal/HalSubscriber.php b/core/modules/hal/lib/Drupal/hal/HalSubscriber.php index 93a70bb..40f8760 100644 --- a/core/modules/hal/lib/Drupal/hal/HalSubscriber.php +++ b/core/modules/hal/lib/Drupal/hal/HalSubscriber.php @@ -7,14 +7,12 @@ namespace Drupal\hal; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Subscribes to the kernel request event to add HAL media types. */ -class HalSubscriber implements EventSubscriberInterface { +class HalSubscriber { /** * Registers HAL formats with the Request class. @@ -27,15 +25,4 @@ public function onKernelRequest(GetResponseEvent $event) { $request->setFormat('hal_json', 'application/hal+json'); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequest', 40); - return $events; - } - } diff --git a/core/modules/language/language.events.yml b/core/modules/language/language.events.yml new file mode 100644 index 0000000..9bd2dc5 --- /dev/null +++ b/core/modules/language/language.events.yml @@ -0,0 +1,6 @@ +subscribers: + kernel.request: + - callback: ?language_request_subscriber:onKernelRequestLanguage + priority: 255 + config.save: + - Drupal\language\EventSubscriber\ConfigSubscriber::onConfigSave diff --git a/core/modules/language/language.services.yml b/core/modules/language/language.services.yml index 422644a..81aede7 100644 --- a/core/modules/language/language.services.yml +++ b/core/modules/language/language.services.yml @@ -7,7 +7,3 @@ services: arguments: ['@language_manager', '@plugin.manager.language_negotiation_method', '@config.factory', '@settings'] calls: - [initLanguageManager] - language.config_subscriber: - class: Drupal\language\EventSubscriber\ConfigSubscriber - tags: - - { name: event_subscriber } diff --git a/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php b/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php index 82b6f9d..7b78521 100644 --- a/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php +++ b/core/modules/language/lib/Drupal/language/EventSubscriber/ConfigSubscriber.php @@ -15,7 +15,7 @@ /** * Deletes the container if default language has changed. */ -class ConfigSubscriber implements EventSubscriberInterface { +class ConfigSubscriber { /** * Causes the container to be rebuilt on the next request. @@ -32,12 +32,4 @@ public function onConfigSave(ConfigCrudEvent $event) { } } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - $events[ConfigEvents::SAVE][] = array('onConfigSave', 0); - return $events; - } - } diff --git a/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php b/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php index 8c11eca..0c309bc 100644 --- a/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php +++ b/core/modules/language/lib/Drupal/language/LanguageServiceProvider.php @@ -27,7 +27,6 @@ public function register(ContainerBuilder $container) { // The following services are needed only on multilingual sites. if ($this->isMultilingual()) { $container->register('language_request_subscriber', 'Drupal\language\EventSubscriber\LanguageRequestSubscriber') - ->addTag('event_subscriber') ->addArgument(new Reference('language_manager')) ->addArgument(new Reference('language_negotiator')) ->addArgument(new Reference('string_translation')) diff --git a/core/modules/system/tests/modules/form_test/form_test.events.yml b/core/modules/system/tests/modules/form_test/form_test.events.yml new file mode 100644 index 0000000..56967e1 --- /dev/null +++ b/core/modules/system/tests/modules/form_test/form_test.events.yml @@ -0,0 +1,3 @@ +subscribers: + kernel.request: + - Drupal\form_test\EventSubscriber\FormTestEventSubscriber::onKernelRequest diff --git a/core/modules/system/tests/modules/form_test/form_test.services.yml b/core/modules/system/tests/modules/form_test/form_test.services.yml index 0201650..42ae7a6 100644 --- a/core/modules/system/tests/modules/form_test/form_test.services.yml +++ b/core/modules/system/tests/modules/form_test/form_test.services.yml @@ -1,7 +1,3 @@ services: form_test.form.serviceform: class: Drupal\form_test\FormTestServiceObject - form_test.event_subscriber: - class: Drupal\form_test\EventSubscriber\FormTestEventSubscriber - tags: - - { name: event_subscriber } diff --git a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php index d560f18..d6319ce 100644 --- a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php +++ b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php @@ -7,14 +7,12 @@ namespace Drupal\form_test\EventSubscriber; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; /** * Test event subscriber to add new attributes to the request. */ -class FormTestEventSubscriber implements EventSubscriberInterface { +class FormTestEventSubscriber { /** * Adds custom attributes to the request object. @@ -28,12 +26,4 @@ public function onKernelRequest(GetResponseEvent $event) { $request->attributes->set('request_attribute', 'request_value'); } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequest'); - return $events; - } - } diff --git a/core/modules/system/tests/modules/menu_test/lib/Drupal/menu_test/EventSubscriber/MaintenanceModeSubscriber.php b/core/modules/system/tests/modules/menu_test/lib/Drupal/menu_test/EventSubscriber/MaintenanceModeSubscriber.php index 2071a37..9475b58 100644 --- a/core/modules/system/tests/modules/menu_test/lib/Drupal/menu_test/EventSubscriber/MaintenanceModeSubscriber.php +++ b/core/modules/system/tests/modules/menu_test/lib/Drupal/menu_test/EventSubscriber/MaintenanceModeSubscriber.php @@ -7,14 +7,12 @@ namespace Drupal\menu_test\EventSubscriber; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; /** * Maintenance mode subscriber to set site online on a test. */ -class MaintenanceModeSubscriber implements EventSubscriberInterface { +class MaintenanceModeSubscriber { /** * Set the page online if called from a certain path. @@ -30,12 +28,4 @@ public function onKernelRequestMaintenance(GetResponseEvent $event) { } } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 35); - return $events; - } - } diff --git a/core/modules/system/tests/modules/menu_test/menu_test.events.yml b/core/modules/system/tests/modules/menu_test/menu_test.events.yml new file mode 100644 index 0000000..e4d8127 --- /dev/null +++ b/core/modules/system/tests/modules/menu_test/menu_test.events.yml @@ -0,0 +1,5 @@ +subscribers: + kernel.request: + - callback: Drupal\menu_test\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance + priority: 35 + - menu_test.active_trail_subscriber:onKernelRequest diff --git a/core/modules/system/tests/modules/menu_test/menu_test.services.yml b/core/modules/system/tests/modules/menu_test/menu_test.services.yml index 3de0169..e313280 100644 --- a/core/modules/system/tests/modules/menu_test/menu_test.services.yml +++ b/core/modules/system/tests/modules/menu_test/menu_test.services.yml @@ -1,14 +1,7 @@ services: - menu_test_maintenance_mode_subscriber: - class: Drupal\menu_test\EventSubscriber\MaintenanceModeSubscriber - tags: - - { name: event_subscriber } - menu_test.active_trail_subscriber: class: Drupal\menu_test\EventSubscriber\ActiveTrailSubscriber arguments: ['@state'] - tags: - - { name: event_subscriber } theme.negotiator.test_theme: class: Drupal\menu_test\Theme\TestThemeNegotiator diff --git a/core/modules/system/tests/modules/service_provider_test/lib/Drupal/service_provider_test/TestClass.php b/core/modules/system/tests/modules/service_provider_test/lib/Drupal/service_provider_test/TestClass.php index 9078493..f1469c9 100644 --- a/core/modules/system/tests/modules/service_provider_test/lib/Drupal/service_provider_test/TestClass.php +++ b/core/modules/system/tests/modules/service_provider_test/lib/Drupal/service_provider_test/TestClass.php @@ -9,11 +9,9 @@ use Drupal\Core\KeyValueStore\StateInterface; use Drupal\Core\DestructableInterface; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; -class TestClass implements EventSubscriberInterface, DestructableInterface { +class TestClass implements DestructableInterface { /** * The state keyvalue collection. @@ -40,17 +38,6 @@ public function onKernelRequestTest(GetResponseEvent $event) { } /** - * Registers methods as kernel listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestTest', 100); - return $events; - } - - /** * Implements \Drupal\Core\DestructableInterface::destruct(). */ public function destruct() { diff --git a/core/modules/system/tests/modules/service_provider_test/service_provider_test.events.yml b/core/modules/system/tests/modules/service_provider_test/service_provider_test.events.yml new file mode 100644 index 0000000..22d02c3 --- /dev/null +++ b/core/modules/system/tests/modules/service_provider_test/service_provider_test.events.yml @@ -0,0 +1,4 @@ +subscribers: + kernel.request: + - callback: service_provider_test_class:onKernelRequestTest + priority: 100 diff --git a/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml b/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml index dda70f5..eb1cc9b 100644 --- a/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml +++ b/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml @@ -2,6 +2,5 @@ services: service_provider_test_class: class: Drupal\service_provider_test\TestClass tags: - - { name: event_subscriber } - { name: needs_destruction } arguments: ['@state'] diff --git a/core/modules/system/tests/modules/session_test/lib/Drupal/session_test/EventSubscriber/SessionTestSubscriber.php b/core/modules/system/tests/modules/session_test/lib/Drupal/session_test/EventSubscriber/SessionTestSubscriber.php index f27fe0d..16c1325 100644 --- a/core/modules/system/tests/modules/session_test/lib/Drupal/session_test/EventSubscriber/SessionTestSubscriber.php +++ b/core/modules/system/tests/modules/session_test/lib/Drupal/session_test/EventSubscriber/SessionTestSubscriber.php @@ -7,16 +7,14 @@ namespace Drupal\session_test\EventSubscriber; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\Event\GetResponseEvent; /** * Defines a test session subscriber that checks whether the session is empty. */ -class SessionTestSubscriber implements EventSubscriberInterface { +class SessionTestSubscriber { /* * Stores whether $_SESSION is empty at the beginning of the request. @@ -57,16 +55,4 @@ public function onKernelResponseSessionTest(FilterResponseEvent $event) { $response->headers->set('X-Session-Empty', $this->emptySession); } - /** - * Registers the methods in this class that should be listeners. - * - * @return array - * An array of event listener definitions. - */ - static function getSubscribedEvents() { - $events[KernelEvents::RESPONSE][] = array('onKernelResponseSessionTest', 300); - $events[KernelEvents::REQUEST][] = array('onKernelRequestSessionTest', 100); - return $events; - } - } diff --git a/core/modules/system/tests/modules/session_test/session_test.events.yml b/core/modules/system/tests/modules/session_test/session_test.events.yml new file mode 100644 index 0000000..27f061b --- /dev/null +++ b/core/modules/system/tests/modules/session_test/session_test.events.yml @@ -0,0 +1,7 @@ +subscribers: + kernel.request: + - callback: Drupal\session_test\EventSubscriber\SessionTestSubscriber::onKernelRequestSessionTest + priority: 300 + kernel.response: + - callback: Drupal\session_test\EventSubscriber\SessionTestSubscriber::onKernelResponseSessionTest + priority: 100 diff --git a/core/modules/system/tests/modules/session_test/session_test.services.yml b/core/modules/system/tests/modules/session_test/session_test.services.yml deleted file mode 100644 index 8ef2e20..0000000 --- a/core/modules/system/tests/modules/session_test/session_test.services.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - session_test.subscriber: - class: Drupal\session_test\EventSubscriber\SessionTestSubscriber - tags: - - { name: event_subscriber } diff --git a/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php b/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php index d3676e0..b86ede2 100644 --- a/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php +++ b/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/EventSubscriber/ThemeTestSubscriber.php @@ -8,14 +8,12 @@ namespace Drupal\theme_test\EventSubscriber; use Symfony\Component\DependencyInjection\ContainerAware; -use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** * Theme test subscriber for controller requests. */ -class ThemeTestSubscriber extends ContainerAware implements EventSubscriberInterface { +class ThemeTestSubscriber extends ContainerAware { /** * The used container. @@ -64,13 +62,4 @@ public function onView(GetResponseEvent $event) { } } - /** - * {@inheritdoc} - */ - static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onRequest'); - $events[KernelEvents::VIEW][] = array('onView', -1000); - return $events; - } - } diff --git a/core/modules/system/tests/modules/theme_test/theme_test.events.yml b/core/modules/system/tests/modules/theme_test/theme_test.events.yml new file mode 100644 index 0000000..c00f5a9 --- /dev/null +++ b/core/modules/system/tests/modules/theme_test/theme_test.events.yml @@ -0,0 +1,6 @@ +subscribers: + kernel.request: + - Drupal\theme_test\EventSubscriber\ThemeTestSubscriber::onRequest + kernel.view: + - callback: Drupal\theme_test\EventSubscriber\ThemeTestSubscriber::onView + priority: -1000 diff --git a/core/modules/system/tests/modules/theme_test/theme_test.services.yml b/core/modules/system/tests/modules/theme_test/theme_test.services.yml index 69fd3ca..41d944b 100644 --- a/core/modules/system/tests/modules/theme_test/theme_test.services.yml +++ b/core/modules/system/tests/modules/theme_test/theme_test.services.yml @@ -1,9 +1,4 @@ services: - theme_test.subscriber: - class: Drupal\theme_test\EventSubscriber\ThemeTestSubscriber - tags: - - { name: event_subscriber } - theme.negotiator.test_custom_theme: class: Drupal\theme_test\Theme\CustomThemeNegotiator tags: diff --git a/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php b/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php index 3c478f7..2e5d4aa 100644 --- a/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php +++ b/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php @@ -7,15 +7,13 @@ namespace Drupal\user\EventSubscriber; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; /** * Maintenance mode subscriber to logout users. */ -class MaintenanceModeSubscriber implements EventSubscriberInterface { +class MaintenanceModeSubscriber { /** * Determine whether the page is configured to be offline. @@ -71,12 +69,4 @@ public function onKernelRequestMaintenance(GetResponseEvent $event) { } } - /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 35); - return $events; - } - } diff --git a/core/modules/user/user.events.yml b/core/modules/user/user.events.yml new file mode 100644 index 0000000..4862e71 --- /dev/null +++ b/core/modules/user/user.events.yml @@ -0,0 +1,4 @@ +subscribers: + kernel.request: + - callback: Drupal\user\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance + priority: 35 diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml index 17229ed..da6d110 100644 --- a/core/modules/user/user.services.yml +++ b/core/modules/user/user.services.yml @@ -31,10 +31,6 @@ services: user.autocomplete: class: Drupal\user\UserAutocomplete arguments: ['@database', '@config.factory', '@entity.manager', '@entity.query'] - user_maintenance_mode_subscriber: - class: Drupal\user\EventSubscriber\MaintenanceModeSubscriber - tags: - - { name: event_subscriber } theme.negotiator.admin_theme: class: Drupal\user\Theme\AdminNegotiator arguments: ['@current_user', '@config.factory', '@entity.manager', '@router.admin_context'] diff --git a/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php index 1fdfcf0..3228d4c 100644 --- a/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php +++ b/core/modules/views/lib/Drupal/views/EventSubscriber/RouteSubscriber.php @@ -81,16 +81,6 @@ public function reset() { } /** - * {@inheritdoc} - */ - public static function getSubscribedEvents() { - $events = parent::getSubscribedEvents(); - $events[KernelEvents::VIEW][] = array('onHtmlPage', 75); - $events[RoutingEvents::FINISHED] = array('routeRebuildFinished'); - return $events; - } - - /** * Gets all the views and display IDs using a route. */ protected function getViewsDisplayIDsWithRoute() { diff --git a/core/modules/views/views.events.yml b/core/modules/views/views.events.yml new file mode 100644 index 0000000..7c88e35 --- /dev/null +++ b/core/modules/views/views.events.yml @@ -0,0 +1,8 @@ +subscribers: + kernel.view: + - callback: views.route_subscriber:onHtmlPage + priority: 75 + routing.route_alter: + - views.route_subscriber:onAlterRoutes + routing.route_finished: + - views.route_subscriber:routeRebuildFinished diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml index f42a7bd..d30e688 100644 --- a/core/modules/views/views.services.yml +++ b/core/modules/views/views.services.yml @@ -85,8 +85,6 @@ services: views.route_subscriber: class: Drupal\views\EventSubscriber\RouteSubscriber arguments: ['@entity.manager', '@state'] - tags: - - { name: 'event_subscriber' } views.route_access_check: class: Drupal\views\ViewsAccessCheck tags: diff --git a/core/tests/Drupal/Tests/Core/EventListenerPassTest.php b/core/tests/Drupal/Tests/Core/EventListenerPassTest.php new file mode 100644 index 0000000..f3a43ee --- /dev/null +++ b/core/tests/Drupal/Tests/Core/EventListenerPassTest.php @@ -0,0 +1,394 @@ + 'Event listener pass', + 'description' => 'Tests the event listener pass', + 'group' => 'Bootstrap', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + $this->eventListenerPass = new TestEventListenerPass(); + } + + /** + * Creates a container with a event_dispatcher and module handler service. + * + * @return \Symfony\Component\DependencyInjection\ContainerBuilder + * The created container. + */ + protected function setUpContainer() { + $container = new ContainerBuilder(); + $this->eventDispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface'); + $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); + $container->set('event_dispatcher', $this->eventDispatcher); + $container->register('event_dispatcher', 'Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher') + ->setArguments(array(new Reference('service_container'))); + + $container->set('module_handler', $this->moduleHandler); + return $container; + } + + /** + * Tests the event listener pass without any event. + */ + public function testNoEvent() { + $container = $this->setUpContainer(); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array())); + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + + $this->eventListenerPass->process($container); + + $this->assertEquals(3, count($container->getServiceIds())); + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one class based event. + */ + public function testEvent() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = 'Drupal\Tests\Core\TestClass::subscriberMethod'; + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $expected_calls[] = array('addListenerService', array('example', array('event_listener.Drupal.Tests.Core.TestClass', 'subscriberMethod'))); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one class based event with a priority. + */ + public function testEventWithPriority() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = array( + 'callback' => 'Drupal\Tests\Core\TestClass::subscriberMethod', + 'priority' => 10, + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $expected_calls[] = array('addListenerService', array('example', array('event_listener.Drupal.Tests.Core.TestClass', 'subscriberMethod'), 10)); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one service based event. + */ + public function testServiceEventWithoutPriority() { + $container = $this->setUpContainer(); + $container->register('subscriber_service', 'Drupal\Tests\Core\TestClass'); + + $info['subscribers']['example'][] = array( + 'callback' => 'subscriber_service:subscriberMethod', + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $expected_calls[] = array('addListenerService', array('example', array('subscriber_service', 'subscriberMethod'))); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one service based event with a priority. + */ + public function testServiceEventWithPriority() { + $container = $this->setUpContainer(); + $container->register('subscriber_service', 'Drupal\Tests\Core\TestClass'); + + $info['subscribers']['example'][] = array( + 'callback' => 'subscriber_service:subscriberMethod', + 'priority' => 10, + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $expected_calls[] = array('addListenerService', array('example', array('subscriber_service', 'subscriberMethod'), 10)); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one service which does not exist. + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage Service "subscriber_service" does not exist. + * + */ + public function testNotExistingService() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = array( + 'callback' => 'subscriber_service:subscriberMethod', + 'priority' => 10, + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + } + + /** + * Tests the event listener pass with one optional non existing service. + */ + public function testOptionalNonExistingService() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = array( + 'callback' => '?subscriber_service:subscriberMethod', + 'priority' => 10, + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one optional non existent class. + */ + public function testOptionalNotExistingClass() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = array( + 'callback' => '?Drupal\Tests\Core\TestClass2::subscriberMethod', + 'priority' => 10, + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with one class which does not exist. + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage Class "Drupal\Tests\Core\TestClass2" does not exist. + * + */ + public function testNotExistingClass() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = array( + 'callback' => 'Drupal\Tests\Core\TestClass2::subscriberMethod', + 'priority' => 10, + ); + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + } + + + /** + * Tests the event listener pass with a bunch of services/classes. + */ + public function testMultipleEvents() { + $container = $this->setUpContainer(); + $container->register('subscriber_service', 'Drupal\Tests\Core\TestClass'); + + // Set a service without a priority. + $info['subscribers']['example'][] = array( + 'callback' => 'subscriber_service:subscriberMethod', + ); + + // Setup the same method with different priorities. + $info['subscribers']['example2'][] = array( + 'callback' => 'subscriber_service:subscriberMethod2', + 'priority' => -10, + ); + + $info['subscribers']['example2'][] = array( + 'callback' => 'subscriber_service:subscriberMethod2', + 'priority' => 10, + ); + + // Subscribe to different events with the same method and same priority. + $info['subscribers']['example3'][] = array( + 'callback' => 'Drupal\Tests\Core\TestClass::subscriberMethod2', + 'priority' => 10, + ); + $info['subscribers']['example4'][] = array( + 'callback' => 'Drupal\Tests\Core\TestClass::subscriberMethod2', + 'priority' => 10, + ); + + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + + $definition = $container->getDefinition('event_dispatcher'); + $expected_calls = array(); + $expected_calls[] = array('addListenerService', array('example', array('subscriber_service', 'subscriberMethod'))); + $expected_calls[] = array('addListenerService', array('example2', array('subscriber_service', 'subscriberMethod2'), -10)); + $expected_calls[] = array('addListenerService', array('example2', array('subscriber_service', 'subscriberMethod2'), 10)); + $expected_calls[] = array('addListenerService', array('example3', array('event_listener.Drupal.Tests.Core.TestClass', 'subscriberMethod2'), 10)); + $expected_calls[] = array('addListenerService', array('example4', array('event_listener.Drupal.Tests.Core.TestClass', 'subscriberMethod2'), 10)); + $this->assertEquals($expected_calls, $definition->getMethodCalls()); + } + + /** + * Tests the event listener pass with an invalid yaml file. + * + * @expectedException \UnexpectedValueException + * @expectedExceptionMessage Unable to parse the callback name "test_service-test" + */ + public function testInvalidYaml() { + $container = $this->setUpContainer(); + + $info['subscribers']['example'][] = 'test_service-test'; + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + } + + /** + * Tests the evnet listener pass with an yaml file without any subscribers. + */ + public function testEmptyYaml() { + $container = $this->setUpContainer(); + + $info['subscribers'] = NULL; + $yaml_discovery = $this->getMock('Drupal\Component\Discovery\DiscoverableInterface'); + $yaml_discovery->expects($this->once()) + ->method('findAll') + ->will($this->returnValue(array($info))); + + $this->eventListenerPass->setYamlDiscovery($yaml_discovery); + $this->eventListenerPass->process($container); + $definition = $container->getDefinition('event_dispatcher'); + $this->assertEquals(array(), $definition->getMethodCalls()); + } + +} + +class TestEventListenerPass extends EventListenerPass { + + public function setYamlDiscovery(DiscoverableInterface $yaml_discovery) { + $this->yamlDiscovery = $yaml_discovery; + } + + protected function getYamlDiscovery(ModuleHandlerInterface $module_handler) { + return $this->yamlDiscovery; + } + +} + +class TestClass { + public function subscriberMethod() {} + public function subscriberMethod2() {} +}