annotate core/lib/Drupal/Core/Routing/RouteProviderLazyBuilder.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 7a779792577d
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Core\Routing;
Chris@0 4
Chris@0 5 use Symfony\Cmf\Component\Routing\PagedRouteProviderInterface;
Chris@12 6 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
Chris@0 7 use Symfony\Component\HttpFoundation\Request;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * A Route Provider front-end for all Drupal-stored routes.
Chris@0 11 */
Chris@12 12 class RouteProviderLazyBuilder implements PreloadableRouteProviderInterface, PagedRouteProviderInterface, EventSubscriberInterface {
Chris@0 13
Chris@0 14 /**
Chris@0 15 * The route provider service.
Chris@0 16 *
Chris@0 17 * @var \Drupal\Core\Routing\RouteProviderInterface
Chris@0 18 */
Chris@0 19 protected $routeProvider;
Chris@0 20
Chris@0 21 /**
Chris@0 22 * The route building service.
Chris@0 23 *
Chris@0 24 * @var \Drupal\Core\Routing\RouteBuilderInterface
Chris@0 25 */
Chris@0 26 protected $routeBuilder;
Chris@0 27
Chris@0 28 /**
Chris@0 29 * Flag to determine if the router has been rebuilt.
Chris@0 30 *
Chris@0 31 * @var bool
Chris@0 32 */
Chris@0 33 protected $rebuilt = FALSE;
Chris@0 34
Chris@0 35 /**
Chris@12 36 * Flag to determine if router is currently being rebuilt.
Chris@12 37 *
Chris@12 38 * Used to prevent recursive router rebuilds during module installation.
Chris@12 39 * Recursive rebuilds can occur when route information is required by alter
Chris@12 40 * hooks that are triggered during a rebuild, for example,
Chris@12 41 * hook_menu_links_discovered_alter().
Chris@12 42 *
Chris@12 43 * @var bool
Chris@12 44 */
Chris@12 45 protected $rebuilding = FALSE;
Chris@12 46
Chris@12 47 /**
Chris@0 48 * RouteProviderLazyBuilder constructor.
Chris@0 49 *
Chris@0 50 * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
Chris@0 51 * The route provider service.
Chris@0 52 * @param \Drupal\Core\Routing\RouteBuilderInterface $route_builder
Chris@0 53 * The route building service.
Chris@0 54 */
Chris@0 55 public function __construct(RouteProviderInterface $route_provider, RouteBuilderInterface $route_builder) {
Chris@0 56 $this->routeProvider = $route_provider;
Chris@0 57 $this->routeBuilder = $route_builder;
Chris@0 58 }
Chris@0 59
Chris@0 60 /**
Chris@0 61 * Gets the real route provider service and rebuilds the router id necessary.
Chris@0 62 *
Chris@0 63 * @return \Drupal\Core\Routing\RouteProviderInterface
Chris@0 64 * The route provider service.
Chris@0 65 */
Chris@0 66 protected function getRouteProvider() {
Chris@12 67 if (!$this->rebuilt && !$this->rebuilding) {
Chris@0 68 $this->routeBuilder->rebuild();
Chris@0 69 $this->rebuilt = TRUE;
Chris@0 70 }
Chris@0 71 return $this->routeProvider;
Chris@0 72 }
Chris@0 73
Chris@0 74 /**
Chris@0 75 * {@inheritdoc}
Chris@0 76 */
Chris@0 77 public function getRouteCollectionForRequest(Request $request) {
Chris@0 78 return $this->getRouteProvider()->getRouteCollectionForRequest($request);
Chris@0 79 }
Chris@0 80
Chris@0 81 /**
Chris@0 82 * {@inheritdoc}
Chris@0 83 */
Chris@0 84 public function getRouteByName($name) {
Chris@0 85 return $this->getRouteProvider()->getRouteByName($name);
Chris@0 86 }
Chris@0 87
Chris@0 88 /**
Chris@0 89 * {@inheritdoc}
Chris@0 90 */
Chris@0 91 public function preLoadRoutes($names) {
Chris@0 92 return $this->getRouteProvider()->preLoadRoutes($names);
Chris@0 93 }
Chris@0 94
Chris@0 95 /**
Chris@0 96 * {@inheritdoc}
Chris@0 97 */
Chris@0 98 public function getRoutesByNames($names) {
Chris@0 99 return $this->getRouteProvider()->getRoutesByNames($names);
Chris@0 100 }
Chris@0 101
Chris@0 102 /**
Chris@0 103 * {@inheritdoc}
Chris@0 104 */
Chris@0 105 public function getRoutesByPattern($pattern) {
Chris@0 106 return $this->getRouteProvider()->getRoutesByPattern($pattern);
Chris@0 107 }
Chris@0 108
Chris@0 109 /**
Chris@0 110 * {@inheritdoc}
Chris@0 111 */
Chris@0 112 public function getAllRoutes() {
Chris@0 113 return $this->getRouteProvider()->getAllRoutes();
Chris@0 114 }
Chris@0 115
Chris@0 116 /**
Chris@0 117 * {@inheritdoc}
Chris@0 118 */
Chris@0 119 public function reset() {
Chris@0 120 // Don't call getRouteProvider as this is results in recursive rebuilds.
Chris@0 121 return $this->routeProvider->reset();
Chris@0 122 }
Chris@0 123
Chris@0 124 /**
Chris@0 125 * {@inheritdoc}
Chris@0 126 */
Chris@0 127 public function getRoutesPaged($offset, $length = NULL) {
Chris@0 128 return $this->getRouteProvider()->getRoutesPaged($offset, $length);
Chris@0 129 }
Chris@0 130
Chris@0 131 /**
Chris@0 132 * {@inheritdoc}
Chris@0 133 */
Chris@0 134 public function getRoutesCount() {
Chris@0 135 return $this->getRouteProvider()->getRoutesCount();
Chris@0 136 }
Chris@0 137
Chris@0 138 /**
Chris@0 139 * Determines if the router has been rebuilt.
Chris@0 140 *
Chris@0 141 * @return bool
Chris@0 142 * TRUE is the router has been rebuilt, FALSE if not.
Chris@0 143 */
Chris@0 144 public function hasRebuilt() {
Chris@0 145 return $this->rebuilt;
Chris@0 146 }
Chris@0 147
Chris@12 148 /**
Chris@12 149 * {@inheritdoc}
Chris@12 150 */
Chris@12 151 public static function getSubscribedEvents() {
Chris@12 152 $events[RoutingEvents::DYNAMIC][] = ['routerRebuilding', 3000];
Chris@12 153 $events[RoutingEvents::FINISHED][] = ['routerRebuildFinished', -3000];
Chris@12 154 return $events;
Chris@12 155 }
Chris@12 156
Chris@12 157 /**
Chris@12 158 * Sets the router rebuilding flag to TRUE.
Chris@12 159 */
Chris@12 160 public function routerRebuilding() {
Chris@12 161 $this->rebuilding = TRUE;
Chris@12 162 }
Chris@12 163
Chris@12 164 /**
Chris@12 165 * Sets the router rebuilding flag to FALSE.
Chris@12 166 */
Chris@12 167 public function routerRebuildFinished() {
Chris@12 168 $this->rebuilding = FALSE;
Chris@12 169 }
Chris@12 170
Chris@0 171 }