diff --git a/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php b/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php index e9fc868..4fa722a7 100644 --- a/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php +++ b/core/lib/Drupal/Core/Routing/CachedUrlGenerator.php @@ -13,7 +13,9 @@ use Drupal\Core\Language\LanguageManagerInterface; use Symfony\Cmf\Component\Routing\RouteProviderInterface as SymfonyRouteProviderInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Exception\RouteNotFoundException; use Symfony\Component\Routing\RequestContext as SymfonyRequestContext; +use Symfony\Component\Routing\Route as SymfonyRoute; /** * Class used to wrap a UrlGenerator to provide caching of the generated values. @@ -150,7 +152,7 @@ public function generateFromRoute($name, $parameters = array(), $options = array $key = self::ROUTE_CACHE_PREFIX . hash('sha256', serialize($name) . serialize($options) . serialize($parameters)); if (!isset($this->cachedUrls[$key])) { $generated_url = $this->urlGenerator->generateFromRoute($name, $parameters, $options); - $route = $this->routeProvider->getRouteByName($name); + $route = $this->getRoute($name); if ($route->hasOption('_cacheable') && !$route->getOption('_cacheable')) { return $generated_url; } @@ -163,6 +165,30 @@ public function generateFromRoute($name, $parameters = array(), $options = array } /** + * Find the route using the provided route name. + * + * @param string $name + * The route name to fetch + * + * @return \Symfony\Component\Routing\Route + * The found route. + * + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException + * Thrown if there is no route with that name in this repository. + * + * @see \Drupal\Core\Routing\RouteProviderInterface + */ + protected function getRoute($name) { + if ($name instanceof SymfonyRoute) { + $route = $name; + } + elseif (NULL === $route = clone $this->routeProvider->getRouteByName($name)) { + throw new RouteNotFoundException(sprintf('Route "%s" does not exist.', $name)); + } + return $route; + } + + /** * {@inheritdoc} */ public function setRequest(Request $request) {