diff core/lib/Drupal/Core/Routing/RouteProviderLazyBuilder.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 7a779792577d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Routing/RouteProviderLazyBuilder.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,135 @@
+<?php
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Cmf\Component\Routing\PagedRouteProviderInterface;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * A Route Provider front-end for all Drupal-stored routes.
+ */
+class RouteProviderLazyBuilder implements PreloadableRouteProviderInterface, PagedRouteProviderInterface {
+
+  /**
+   * The route provider service.
+   *
+   * @var \Drupal\Core\Routing\RouteProviderInterface
+   */
+  protected $routeProvider;
+
+  /**
+   * The route building service.
+   *
+   * @var \Drupal\Core\Routing\RouteBuilderInterface
+   */
+  protected $routeBuilder;
+
+  /**
+   * Flag to determine if the router has been rebuilt.
+   *
+   * @var bool
+   */
+  protected $rebuilt = FALSE;
+
+  /**
+   * RouteProviderLazyBuilder constructor.
+   *
+   * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
+   *   The route provider service.
+   * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
+   *   The route building service.
+   */
+  public function __construct(RouteProviderInterface $route_provider, RouteBuilderInterface $route_builder) {
+    $this->routeProvider = $route_provider;
+    $this->routeBuilder = $route_builder;
+  }
+
+  /**
+   * Gets the real route provider service and rebuilds the router id necessary.
+   *
+   * @return \Drupal\Core\Routing\RouteProviderInterface
+   *   The route provider service.
+   */
+  protected function getRouteProvider() {
+    if (!$this->rebuilt) {
+      $this->routeBuilder->rebuild();
+      $this->rebuilt = TRUE;
+    }
+    return $this->routeProvider;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRouteCollectionForRequest(Request $request) {
+    return $this->getRouteProvider()->getRouteCollectionForRequest($request);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRouteByName($name) {
+    return $this->getRouteProvider()->getRouteByName($name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function preLoadRoutes($names) {
+    return $this->getRouteProvider()->preLoadRoutes($names);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRoutesByNames($names) {
+    return $this->getRouteProvider()->getRoutesByNames($names);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRoutesByPattern($pattern) {
+    return $this->getRouteProvider()->getRoutesByPattern($pattern);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAllRoutes() {
+    return $this->getRouteProvider()->getAllRoutes();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function reset() {
+    // Don't call getRouteProvider as this is results in recursive rebuilds.
+    return $this->routeProvider->reset();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRoutesPaged($offset, $length = NULL) {
+    return $this->getRouteProvider()->getRoutesPaged($offset, $length);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRoutesCount() {
+    return $this->getRouteProvider()->getRoutesCount();
+  }
+
+  /**
+   * Determines if the router has been rebuilt.
+   *
+   * @return bool
+   *   TRUE is the router has been rebuilt, FALSE if not.
+   */
+  public function hasRebuilt() {
+    return $this->rebuilt;
+  }
+
+}