Chris@0: routeName = $route_name; Chris@0: $this->route = $route; Chris@0: Chris@0: // Pre-filter parameters. Chris@0: $route_params = $this->getParameterNames(); Chris@0: $parameters = array_intersect_key($parameters, $route_params); Chris@0: $raw_parameters = array_intersect_key($raw_parameters, $route_params); Chris@0: $this->parameters = new ParameterBag($parameters); Chris@0: $this->rawParameters = new ParameterBag($raw_parameters); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Creates a RouteMatch from a request. Chris@0: * Chris@12: * @param \Symfony\Component\HttpFoundation\Request $request Chris@0: * A request object. Chris@0: * Chris@0: * @return \Drupal\Core\Routing\RouteMatchInterface Chris@0: * A new RouteMatch object if there's a matched route for the request. Chris@0: * A new NullRouteMatch object otherwise (e.g., on a 404 page or when Chris@0: * invoked prior to routing). Chris@0: */ Chris@0: public static function createFromRequest(Request $request) { Chris@0: if ($request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)) { Chris@0: $raw_variables = []; Chris@0: if ($raw = $request->attributes->get('_raw_variables')) { Chris@0: $raw_variables = $raw->all(); Chris@0: } Chris@0: return new static( Chris@0: $request->attributes->get(RouteObjectInterface::ROUTE_NAME), Chris@0: $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT), Chris@0: $request->attributes->all(), Chris@0: $raw_variables); Chris@0: } Chris@0: else { Chris@0: return new NullRouteMatch(); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRouteName() { Chris@0: return $this->routeName; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRouteObject() { Chris@0: return $this->route; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getParameter($parameter_name) { Chris@0: return $this->parameters->get($parameter_name); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getParameters() { Chris@0: return $this->parameters; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRawParameter($parameter_name) { Chris@0: return $this->rawParameters->get($parameter_name); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getRawParameters() { Chris@0: return $this->rawParameters; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the names of all parameters for the currently matched route. Chris@0: * Chris@0: * @return array Chris@0: * Route parameter names as both the keys and values. Chris@0: */ Chris@0: protected function getParameterNames() { Chris@0: $names = []; Chris@0: if ($route = $this->getRouteObject()) { Chris@0: // Variables defined in path and host patterns are route parameters. Chris@0: $variables = $route->compile()->getVariables(); Chris@0: $names = array_combine($variables, $variables); Chris@0: // Route defaults that do not start with a leading "_" are also Chris@0: // parameters, even if they are not included in path or host patterns. Chris@0: foreach ($route->getDefaults() as $name => $value) { Chris@0: if (!isset($names[$name]) && substr($name, 0, 1) !== '_') { Chris@0: $names[$name] = $name; Chris@0: } Chris@0: } Chris@0: } Chris@0: return $names; Chris@0: } Chris@0: Chris@0: }