Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Routing/RouteMatch.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/RouteMatch.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,160 @@ +<?php + +namespace Drupal\Core\Routing; + +use Symfony\Cmf\Component\Routing\RouteObjectInterface; +use Symfony\Component\HttpFoundation\ParameterBag; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Routing\Route; + +/** + * Default object representing the results of routing. + */ +class RouteMatch implements RouteMatchInterface { + + /** + * The route name. + * + * @var string + */ + protected $routeName; + + /** + * The route. + * + * @var \Symfony\Component\Routing\Route + */ + protected $route; + + /** + * A key|value store of parameters. + * + * @var \Symfony\Component\HttpFoundation\ParameterBag + */ + protected $parameters; + + /** + * A key|value store of raw parameters. + * + * @var \Symfony\Component\HttpFoundation\ParameterBag + */ + protected $rawParameters; + + /** + * Constructs a RouteMatch object. + * + * @param string $route_name + * The name of the route. + * @param \Symfony\Component\Routing\Route $route + * The route. + * @param array $parameters + * The parameters array. + * @param array $raw_parameters + * The raw $parameters array. + */ + public function __construct($route_name, Route $route, array $parameters = [], array $raw_parameters = []) { + $this->routeName = $route_name; + $this->route = $route; + + // Pre-filter parameters. + $route_params = $this->getParameterNames(); + $parameters = array_intersect_key($parameters, $route_params); + $raw_parameters = array_intersect_key($raw_parameters, $route_params); + $this->parameters = new ParameterBag($parameters); + $this->rawParameters = new ParameterBag($raw_parameters); + } + + /** + * Creates a RouteMatch from a request. + * + * @param Request $request + * A request object. + * + * @return \Drupal\Core\Routing\RouteMatchInterface + * A new RouteMatch object if there's a matched route for the request. + * A new NullRouteMatch object otherwise (e.g., on a 404 page or when + * invoked prior to routing). + */ + public static function createFromRequest(Request $request) { + if ($request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)) { + $raw_variables = []; + if ($raw = $request->attributes->get('_raw_variables')) { + $raw_variables = $raw->all(); + } + return new static( + $request->attributes->get(RouteObjectInterface::ROUTE_NAME), + $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT), + $request->attributes->all(), + $raw_variables); + } + else { + return new NullRouteMatch(); + } + } + + /** + * {@inheritdoc} + */ + public function getRouteName() { + return $this->routeName; + } + + /** + * {@inheritdoc} + */ + public function getRouteObject() { + return $this->route; + } + + /** + * {@inheritdoc} + */ + public function getParameter($parameter_name) { + return $this->parameters->get($parameter_name); + } + + /** + * {@inheritdoc} + */ + public function getParameters() { + return $this->parameters; + } + + /** + * {@inheritdoc} + */ + public function getRawParameter($parameter_name) { + return $this->rawParameters->get($parameter_name); + } + + /** + * {@inheritdoc} + */ + public function getRawParameters() { + return $this->rawParameters; + } + + /** + * Returns the names of all parameters for the currently matched route. + * + * @return array + * Route parameter names as both the keys and values. + */ + protected function getParameterNames() { + $names = []; + if ($route = $this->getRouteObject()) { + // Variables defined in path and host patterns are route parameters. + $variables = $route->compile()->getVariables(); + $names = array_combine($variables, $variables); + // Route defaults that do not start with a leading "_" are also + // parameters, even if they are not included in path or host patterns. + foreach ($route->getDefaults() as $name => $value) { + if (!isset($names[$name]) && substr($name, 0, 1) !== '_') { + $names[$name] = $name; + } + } + } + return $names; + } + +}