diff --git a/core/core.services.yml b/core/core.services.yml index 7381092c11..90374ddb1a 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -856,10 +856,10 @@ services: class: \Drupal\Core\Routing\Router arguments: ['@router.route_provider', '@path.current', '@url_generator', '@class_resolver'] tags: - - { name: service_id_collector, tag: non_lazy_route_enhancer } - - { name: service_id_collector, tag: route_enhancer } - - { name: service_id_collector, tag: non_lazy_route_filter } - - { name: service_id_collector, tag: route_filter } + - { name: service_collector, tag: non_lazy_route_enhancer, call: addRouteEnhancer } + - { name: service_collector, tag: route_enhancer, call: addRouteEnhancer } + - { name: service_collector, tag: non_lazy_route_filter, call: addRouteFilter } + - { name: service_collector, tag: route_filter, call: addRouteFilter } calls: - [setContext, ['@router.request_context']] router.path_roots_subscriber: diff --git a/core/lib/Drupal/Core/Routing/Enhancer/RouteEnhancerInterface.php b/core/lib/Drupal/Core/Routing/Enhancer/RouteEnhancerInterface.php index d6be823b5e..df1e96f4ee 100644 --- a/core/lib/Drupal/Core/Routing/Enhancer/RouteEnhancerInterface.php +++ b/core/lib/Drupal/Core/Routing/Enhancer/RouteEnhancerInterface.php @@ -7,6 +7,8 @@ /** * A route enhance service to determine route enhance rules. + * + * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. */ interface RouteEnhancerInterface extends BaseRouteEnhancerInterface { diff --git a/core/lib/Drupal/Core/Routing/RouteFilterInterface.php b/core/lib/Drupal/Core/Routing/RouteFilterInterface.php index a3ccb4486f..8bbe2fbe54 100644 --- a/core/lib/Drupal/Core/Routing/RouteFilterInterface.php +++ b/core/lib/Drupal/Core/Routing/RouteFilterInterface.php @@ -7,6 +7,8 @@ /** * A route filter service to filter down the collection of route instances. + * + * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. */ interface RouteFilterInterface extends BaseRouteFilterInterface { diff --git a/core/lib/Drupal/Core/Routing/Router.php b/core/lib/Drupal/Core/Routing/Router.php index 054cbbbdf8..cb1505761b 100644 --- a/core/lib/Drupal/Core/Routing/Router.php +++ b/core/lib/Drupal/Core/Routing/Router.php @@ -4,6 +4,7 @@ use Drupal\Core\DependencyInjection\ClassResolverInterface; use Drupal\Core\Path\CurrentPathStack; +use Drupal\Core\Routing\Enhancer\RouteEnhancerInterface; use Symfony\Cmf\Component\Routing\LazyRouteCollection; use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Cmf\Component\Routing\RouteProviderInterface as BaseRouteProviderInterface; @@ -72,13 +73,6 @@ class Router extends UrlMatcher implements RequestMatcherInterface, RouterInterf protected $urlGenerator; /** - * The class resolver. - * - * @var \Drupal\Core\DependencyInjection\ClassResolverInterface - */ - protected $classResolver; - - /** * Constructs a new Router. * * @param \Symfony\Cmf\Component\Routing\RouteProviderInterface $route_provider @@ -87,23 +81,31 @@ class Router extends UrlMatcher implements RequestMatcherInterface, RouterInterf * The current path stack. * @param \Symfony\Component\Routing\Generator\UrlGeneratorInterface $url_generator * The URL generator. - * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver - * The class resolver. */ - public function __construct(BaseRouteProviderInterface $route_provider, CurrentPathStack $current_path, BaseUrlGeneratorInterface $url_generator, ClassResolverInterface $class_resolver, array $non_lazy_route_enhancers, array $route_enhancers, array $non_lazy_route_filters, array $route_filters) { + public function __construct(BaseRouteProviderInterface $route_provider, CurrentPathStack $current_path, BaseUrlGeneratorInterface $url_generator) { parent::__construct($current_path); $this->routeProvider = $route_provider; $this->urlGenerator = $url_generator; - $this->classResolver = $class_resolver; + } - // Non-lazy route enhancers/filters are always run before the other ones - // (because they're assumed to be lazy), for legacy reasons. - // @todo Remove "non-lazy route enhancers/filters" in D9. - $sorted_enhancer_ids = array_merge($non_lazy_route_enhancers, $route_enhancers); - $sorted_filter_ids = array_merge($non_lazy_route_filters, $route_filters); + /** + * Adds a route filter. + * + * @param \Drupal\Core\Routing\RouteFilterInterface $route_filter + * The route filter. + */ + public function addRouteFilter(RouteFilterInterface $route_filter) { + $this->filters[] = $route_filter; + } - $this->enhancers = array_map([$this->classResolver, 'getInstanceFromDefinition'], $sorted_enhancer_ids); - $this->filters = array_map([$this->classResolver, 'getInstanceFromDefinition'], $sorted_filter_ids); + /** + * Adds a route enhancer. + * + * @param \Drupal\Core\Routing\Enhancer\RouteEnhancerInterface $route_enhancer + * The route enhancer. + */ + public function addRouteEnhancer(RouteEnhancerInterface $route_enhancer) { + $this->enhancers = $route_enhancer; } /**