Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Routing/CurrentRouteMatch.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Routing/CurrentRouteMatch.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,144 @@ +<?php + +namespace Drupal\Core\Routing; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; + +/** + * Default object for current_route_match service. + */ +class CurrentRouteMatch implements ResettableStackedRouteMatchInterface { + + /** + * The related request stack. + * + * @var \Symfony\Component\HttpFoundation\RequestStack + */ + protected $requestStack; + + /** + * Internal cache of RouteMatch objects. + * + * @var \SplObjectStorage + */ + protected $routeMatches; + + /** + * Constructs a CurrentRouteMatch object. + * + * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack + * The request stack. + */ + public function __construct(RequestStack $request_stack) { + $this->requestStack = $request_stack; + $this->routeMatches = new \SplObjectStorage(); + } + + /** + * {@inheritdoc} + */ + public function getRouteName() { + return $this->getCurrentRouteMatch()->getRouteName(); + } + + /** + * {@inheritdoc} + */ + public function getRouteObject() { + return $this->getCurrentRouteMatch()->getRouteObject(); + } + + /** + * {@inheritdoc} + */ + public function getParameter($parameter_name) { + return $this->getCurrentRouteMatch()->getParameter($parameter_name); + } + + /** + * {@inheritdoc} + */ + public function getParameters() { + return $this->getCurrentRouteMatch()->getParameters(); + } + + /** + * {@inheritdoc} + */ + public function getRawParameter($parameter_name) { + return $this->getCurrentRouteMatch()->getRawParameter($parameter_name); + } + + /** + * {@inheritdoc} + */ + public function getRawParameters() { + return $this->getCurrentRouteMatch()->getRawParameters(); + } + + /** + * Returns the route match for the current request. + * + * @return \Drupal\Core\Routing\RouteMatchInterface + * The current route match object. + */ + public function getCurrentRouteMatch() { + return $this->getRouteMatch($this->requestStack->getCurrentRequest()); + } + + /** + * Returns the route match for a passed in request. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * A request object. + * + * @return \Drupal\Core\Routing\RouteMatchInterface + * A route match object created from the request. + */ + protected function getRouteMatch(Request $request) { + if (isset($this->routeMatches[$request])) { + $route_match = $this->routeMatches[$request]; + } + else { + $route_match = RouteMatch::createFromRequest($request); + + // Since getRouteMatch() might be invoked both before and after routing + // is completed, only statically cache the route match after there's a + // matched route. + if ($route_match->getRouteObject()) { + $this->routeMatches[$request] = $route_match; + } + } + return $route_match; + } + + /** + * {@inheritdoc} + */ + public function resetRouteMatch() { + $this->routeMatches = new \SplObjectStorage(); + } + + /** + * {@inheritdoc} + */ + public function getMasterRouteMatch() { + return $this->getRouteMatch($this->requestStack->getMasterRequest()); + } + + /** + * {@inheritdoc} + */ + public function getParentRouteMatch() { + return $this->getRouteMatch($this->requestStack->getParentRequest()); + } + + /** + * {@inheritdoc} + */ + public function getRouteMatchFromRequest(Request $request) { + return $this->getRouteMatch($request); + } + +}