Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Core\Routing;
|
Chris@0
|
4
|
Chris@0
|
5 use Symfony\Component\HttpFoundation\Request;
|
Chris@0
|
6 use Symfony\Component\HttpFoundation\RequestStack;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Default object for current_route_match service.
|
Chris@0
|
10 */
|
Chris@0
|
11 class CurrentRouteMatch implements ResettableStackedRouteMatchInterface {
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * The related request stack.
|
Chris@0
|
15 *
|
Chris@0
|
16 * @var \Symfony\Component\HttpFoundation\RequestStack
|
Chris@0
|
17 */
|
Chris@0
|
18 protected $requestStack;
|
Chris@0
|
19
|
Chris@0
|
20 /**
|
Chris@0
|
21 * Internal cache of RouteMatch objects.
|
Chris@0
|
22 *
|
Chris@0
|
23 * @var \SplObjectStorage
|
Chris@0
|
24 */
|
Chris@0
|
25 protected $routeMatches;
|
Chris@0
|
26
|
Chris@0
|
27 /**
|
Chris@0
|
28 * Constructs a CurrentRouteMatch object.
|
Chris@0
|
29 *
|
Chris@0
|
30 * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
|
Chris@0
|
31 * The request stack.
|
Chris@0
|
32 */
|
Chris@0
|
33 public function __construct(RequestStack $request_stack) {
|
Chris@0
|
34 $this->requestStack = $request_stack;
|
Chris@0
|
35 $this->routeMatches = new \SplObjectStorage();
|
Chris@0
|
36 }
|
Chris@0
|
37
|
Chris@0
|
38 /**
|
Chris@0
|
39 * {@inheritdoc}
|
Chris@0
|
40 */
|
Chris@0
|
41 public function getRouteName() {
|
Chris@0
|
42 return $this->getCurrentRouteMatch()->getRouteName();
|
Chris@0
|
43 }
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * {@inheritdoc}
|
Chris@0
|
47 */
|
Chris@0
|
48 public function getRouteObject() {
|
Chris@0
|
49 return $this->getCurrentRouteMatch()->getRouteObject();
|
Chris@0
|
50 }
|
Chris@0
|
51
|
Chris@0
|
52 /**
|
Chris@0
|
53 * {@inheritdoc}
|
Chris@0
|
54 */
|
Chris@0
|
55 public function getParameter($parameter_name) {
|
Chris@0
|
56 return $this->getCurrentRouteMatch()->getParameter($parameter_name);
|
Chris@0
|
57 }
|
Chris@0
|
58
|
Chris@0
|
59 /**
|
Chris@0
|
60 * {@inheritdoc}
|
Chris@0
|
61 */
|
Chris@0
|
62 public function getParameters() {
|
Chris@0
|
63 return $this->getCurrentRouteMatch()->getParameters();
|
Chris@0
|
64 }
|
Chris@0
|
65
|
Chris@0
|
66 /**
|
Chris@0
|
67 * {@inheritdoc}
|
Chris@0
|
68 */
|
Chris@0
|
69 public function getRawParameter($parameter_name) {
|
Chris@0
|
70 return $this->getCurrentRouteMatch()->getRawParameter($parameter_name);
|
Chris@0
|
71 }
|
Chris@0
|
72
|
Chris@0
|
73 /**
|
Chris@0
|
74 * {@inheritdoc}
|
Chris@0
|
75 */
|
Chris@0
|
76 public function getRawParameters() {
|
Chris@0
|
77 return $this->getCurrentRouteMatch()->getRawParameters();
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 /**
|
Chris@0
|
81 * Returns the route match for the current request.
|
Chris@0
|
82 *
|
Chris@0
|
83 * @return \Drupal\Core\Routing\RouteMatchInterface
|
Chris@0
|
84 * The current route match object.
|
Chris@0
|
85 */
|
Chris@0
|
86 public function getCurrentRouteMatch() {
|
Chris@0
|
87 return $this->getRouteMatch($this->requestStack->getCurrentRequest());
|
Chris@0
|
88 }
|
Chris@0
|
89
|
Chris@0
|
90 /**
|
Chris@0
|
91 * Returns the route match for a passed in request.
|
Chris@0
|
92 *
|
Chris@0
|
93 * @param \Symfony\Component\HttpFoundation\Request $request
|
Chris@0
|
94 * A request object.
|
Chris@0
|
95 *
|
Chris@0
|
96 * @return \Drupal\Core\Routing\RouteMatchInterface
|
Chris@0
|
97 * A route match object created from the request.
|
Chris@0
|
98 */
|
Chris@0
|
99 protected function getRouteMatch(Request $request) {
|
Chris@0
|
100 if (isset($this->routeMatches[$request])) {
|
Chris@0
|
101 $route_match = $this->routeMatches[$request];
|
Chris@0
|
102 }
|
Chris@0
|
103 else {
|
Chris@0
|
104 $route_match = RouteMatch::createFromRequest($request);
|
Chris@0
|
105
|
Chris@0
|
106 // Since getRouteMatch() might be invoked both before and after routing
|
Chris@0
|
107 // is completed, only statically cache the route match after there's a
|
Chris@0
|
108 // matched route.
|
Chris@0
|
109 if ($route_match->getRouteObject()) {
|
Chris@0
|
110 $this->routeMatches[$request] = $route_match;
|
Chris@0
|
111 }
|
Chris@0
|
112 }
|
Chris@0
|
113 return $route_match;
|
Chris@0
|
114 }
|
Chris@0
|
115
|
Chris@0
|
116 /**
|
Chris@0
|
117 * {@inheritdoc}
|
Chris@0
|
118 */
|
Chris@0
|
119 public function resetRouteMatch() {
|
Chris@0
|
120 $this->routeMatches = new \SplObjectStorage();
|
Chris@0
|
121 }
|
Chris@0
|
122
|
Chris@0
|
123 /**
|
Chris@0
|
124 * {@inheritdoc}
|
Chris@0
|
125 */
|
Chris@0
|
126 public function getMasterRouteMatch() {
|
Chris@0
|
127 return $this->getRouteMatch($this->requestStack->getMasterRequest());
|
Chris@0
|
128 }
|
Chris@0
|
129
|
Chris@0
|
130 /**
|
Chris@0
|
131 * {@inheritdoc}
|
Chris@0
|
132 */
|
Chris@0
|
133 public function getParentRouteMatch() {
|
Chris@0
|
134 return $this->getRouteMatch($this->requestStack->getParentRequest());
|
Chris@0
|
135 }
|
Chris@0
|
136
|
Chris@0
|
137 /**
|
Chris@0
|
138 * {@inheritdoc}
|
Chris@0
|
139 */
|
Chris@0
|
140 public function getRouteMatchFromRequest(Request $request) {
|
Chris@0
|
141 return $this->getRouteMatch($request);
|
Chris@0
|
142 }
|
Chris@0
|
143
|
Chris@0
|
144 }
|