Mercurial > hg > isophonics-drupal-site
comparison vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | 4c8ae668cc8c |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
13:5fb285c0d0e3 | 14:1fec387a4317 |
---|---|
9 * file that was distributed with this source code. | 9 * file that was distributed with this source code. |
10 */ | 10 */ |
11 | 11 |
12 namespace Symfony\Component\HttpKernel\DataCollector; | 12 namespace Symfony\Component\HttpKernel\DataCollector; |
13 | 13 |
14 use Symfony\Component\HttpFoundation\Cookie; | |
14 use Symfony\Component\HttpFoundation\ParameterBag; | 15 use Symfony\Component\HttpFoundation\ParameterBag; |
15 use Symfony\Component\HttpFoundation\Request; | 16 use Symfony\Component\HttpFoundation\Request; |
16 use Symfony\Component\HttpFoundation\Response; | 17 use Symfony\Component\HttpFoundation\Response; |
17 use Symfony\Component\HttpKernel\Event\FilterResponseEvent; | 18 use Symfony\Component\HttpKernel\Event\FilterResponseEvent; |
18 use Symfony\Component\HttpKernel\KernelEvents; | 19 use Symfony\Component\HttpKernel\KernelEvents; |
19 use Symfony\Component\HttpKernel\Event\FilterControllerEvent; | 20 use Symfony\Component\HttpKernel\Event\FilterControllerEvent; |
20 use Symfony\Component\EventDispatcher\EventSubscriberInterface; | 21 use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
21 | 22 |
22 /** | 23 /** |
23 * RequestDataCollector. | |
24 * | |
25 * @author Fabien Potencier <fabien@symfony.com> | 24 * @author Fabien Potencier <fabien@symfony.com> |
26 */ | 25 */ |
27 class RequestDataCollector extends DataCollector implements EventSubscriberInterface | 26 class RequestDataCollector extends DataCollector implements EventSubscriberInterface, LateDataCollectorInterface |
28 { | 27 { |
29 /** @var \SplObjectStorage */ | |
30 protected $controllers; | 28 protected $controllers; |
31 | 29 |
32 public function __construct() | 30 public function __construct() |
33 { | 31 { |
34 $this->controllers = new \SplObjectStorage(); | 32 $this->controllers = new \SplObjectStorage(); |
37 /** | 35 /** |
38 * {@inheritdoc} | 36 * {@inheritdoc} |
39 */ | 37 */ |
40 public function collect(Request $request, Response $response, \Exception $exception = null) | 38 public function collect(Request $request, Response $response, \Exception $exception = null) |
41 { | 39 { |
42 $responseHeaders = $response->headers->all(); | |
43 foreach ($response->headers->getCookies() as $cookie) { | |
44 $responseHeaders['set-cookie'][] = (string) $cookie; | |
45 } | |
46 | |
47 // attributes are serialized and as they can be anything, they need to be converted to strings. | 40 // attributes are serialized and as they can be anything, they need to be converted to strings. |
48 $attributes = array(); | 41 $attributes = array(); |
49 $route = ''; | 42 $route = ''; |
50 foreach ($request->attributes->all() as $key => $value) { | 43 foreach ($request->attributes->all() as $key => $value) { |
51 if ('_route' === $key) { | 44 if ('_route' === $key) { |
78 $flashes = $session->getFlashBag()->peekAll(); | 71 $flashes = $session->getFlashBag()->peekAll(); |
79 } | 72 } |
80 } | 73 } |
81 | 74 |
82 $statusCode = $response->getStatusCode(); | 75 $statusCode = $response->getStatusCode(); |
76 | |
77 $responseCookies = array(); | |
78 foreach ($response->headers->getCookies() as $cookie) { | |
79 $responseCookies[$cookie->getName()] = $cookie; | |
80 } | |
83 | 81 |
84 $this->data = array( | 82 $this->data = array( |
85 'method' => $request->getMethod(), | 83 'method' => $request->getMethod(), |
86 'format' => $request->getRequestFormat(), | 84 'format' => $request->getRequestFormat(), |
87 'content' => $content, | 85 'content' => $content, |
93 'request_headers' => $request->headers->all(), | 91 'request_headers' => $request->headers->all(), |
94 'request_server' => $request->server->all(), | 92 'request_server' => $request->server->all(), |
95 'request_cookies' => $request->cookies->all(), | 93 'request_cookies' => $request->cookies->all(), |
96 'request_attributes' => $attributes, | 94 'request_attributes' => $attributes, |
97 'route' => $route, | 95 'route' => $route, |
98 'response_headers' => $responseHeaders, | 96 'response_headers' => $response->headers->all(), |
97 'response_cookies' => $responseCookies, | |
99 'session_metadata' => $sessionMetadata, | 98 'session_metadata' => $sessionMetadata, |
100 'session_attributes' => $sessionAttributes, | 99 'session_attributes' => $sessionAttributes, |
101 'flashes' => $flashes, | 100 'flashes' => $flashes, |
102 'path_info' => $request->getPathInfo(), | 101 'path_info' => $request->getPathInfo(), |
103 'controller' => 'n/a', | 102 'controller' => 'n/a', |
119 foreach ($this->data as $key => $value) { | 118 foreach ($this->data as $key => $value) { |
120 if (!is_array($value)) { | 119 if (!is_array($value)) { |
121 continue; | 120 continue; |
122 } | 121 } |
123 if ('request_headers' === $key || 'response_headers' === $key) { | 122 if ('request_headers' === $key || 'response_headers' === $key) { |
124 $value = array_map(function ($v) { return isset($v[0]) && !isset($v[1]) ? $v[0] : $v; }, $value); | 123 $this->data[$key] = array_map(function ($v) { return isset($v[0]) && !isset($v[1]) ? $v[0] : $v; }, $value); |
125 } | |
126 if ('request_server' !== $key && 'request_cookies' !== $key) { | |
127 $this->data[$key] = array_map(array($this, 'cloneVar'), $value); | |
128 } | 124 } |
129 } | 125 } |
130 | 126 |
131 if (isset($this->controllers[$request])) { | 127 if (isset($this->controllers[$request])) { |
132 $this->data['controller'] = $this->parseController($this->controllers[$request]); | 128 $this->data['controller'] = $this->parseController($this->controllers[$request]); |
133 unset($this->controllers[$request]); | 129 unset($this->controllers[$request]); |
134 } | 130 } |
135 | 131 |
136 if (null !== $session && $session->isStarted()) { | 132 if ($request->attributes->has('_redirected') && $redirectCookie = $request->cookies->get('sf_redirect')) { |
137 if ($request->attributes->has('_redirected')) { | 133 $this->data['redirect'] = json_decode($redirectCookie, true); |
138 $this->data['redirect'] = $session->remove('sf_redirect'); | 134 |
139 } | 135 $response->headers->clearCookie('sf_redirect'); |
140 | 136 } |
141 if ($response->isRedirect()) { | 137 |
142 $session->set('sf_redirect', array( | 138 if ($response->isRedirect()) { |
139 $response->headers->setCookie(new Cookie( | |
140 'sf_redirect', | |
141 json_encode(array( | |
143 'token' => $response->headers->get('x-debug-token'), | 142 'token' => $response->headers->get('x-debug-token'), |
144 'route' => $request->attributes->get('_route', 'n/a'), | 143 'route' => $request->attributes->get('_route', 'n/a'), |
145 'method' => $request->getMethod(), | 144 'method' => $request->getMethod(), |
146 'controller' => $this->parseController($request->attributes->get('_controller')), | 145 'controller' => $this->parseController($request->attributes->get('_controller')), |
147 'status_code' => $statusCode, | 146 'status_code' => $statusCode, |
148 'status_text' => Response::$statusTexts[(int) $statusCode], | 147 'status_text' => Response::$statusTexts[(int) $statusCode], |
149 )); | 148 )) |
150 } | 149 )); |
151 } | 150 } |
151 | |
152 $this->data['identifier'] = $this->data['route'] ?: (is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']); | |
153 } | |
154 | |
155 public function lateCollect() | |
156 { | |
157 $this->data = $this->cloneVar($this->data); | |
158 } | |
159 | |
160 public function reset() | |
161 { | |
162 $this->data = array(); | |
163 $this->controllers = new \SplObjectStorage(); | |
152 } | 164 } |
153 | 165 |
154 public function getMethod() | 166 public function getMethod() |
155 { | 167 { |
156 return $this->data['method']; | 168 return $this->data['method']; |
161 return $this->data['path_info']; | 173 return $this->data['path_info']; |
162 } | 174 } |
163 | 175 |
164 public function getRequestRequest() | 176 public function getRequestRequest() |
165 { | 177 { |
166 return new ParameterBag($this->data['request_request']); | 178 return new ParameterBag($this->data['request_request']->getValue()); |
167 } | 179 } |
168 | 180 |
169 public function getRequestQuery() | 181 public function getRequestQuery() |
170 { | 182 { |
171 return new ParameterBag($this->data['request_query']); | 183 return new ParameterBag($this->data['request_query']->getValue()); |
172 } | 184 } |
173 | 185 |
174 public function getRequestHeaders() | 186 public function getRequestHeaders() |
175 { | 187 { |
176 return new ParameterBag($this->data['request_headers']); | 188 return new ParameterBag($this->data['request_headers']->getValue()); |
177 } | 189 } |
178 | 190 |
179 public function getRequestServer($raw = false) | 191 public function getRequestServer($raw = false) |
180 { | 192 { |
181 return new ParameterBag($raw ? $this->data['request_server'] : array_map(array($this, 'cloneVar'), $this->data['request_server'])); | 193 return new ParameterBag($this->data['request_server']->getValue($raw)); |
182 } | 194 } |
183 | 195 |
184 public function getRequestCookies($raw = false) | 196 public function getRequestCookies($raw = false) |
185 { | 197 { |
186 return new ParameterBag($raw ? $this->data['request_cookies'] : array_map(array($this, 'cloneVar'), $this->data['request_cookies'])); | 198 return new ParameterBag($this->data['request_cookies']->getValue($raw)); |
187 } | 199 } |
188 | 200 |
189 public function getRequestAttributes() | 201 public function getRequestAttributes() |
190 { | 202 { |
191 return new ParameterBag($this->data['request_attributes']); | 203 return new ParameterBag($this->data['request_attributes']->getValue()); |
192 } | 204 } |
193 | 205 |
194 public function getResponseHeaders() | 206 public function getResponseHeaders() |
195 { | 207 { |
196 return new ParameterBag($this->data['response_headers']); | 208 return new ParameterBag($this->data['response_headers']->getValue()); |
209 } | |
210 | |
211 public function getResponseCookies() | |
212 { | |
213 return new ParameterBag($this->data['response_cookies']->getValue()); | |
197 } | 214 } |
198 | 215 |
199 public function getSessionMetadata() | 216 public function getSessionMetadata() |
200 { | 217 { |
201 return $this->data['session_metadata']; | 218 return $this->data['session_metadata']->getValue(); |
202 } | 219 } |
203 | 220 |
204 public function getSessionAttributes() | 221 public function getSessionAttributes() |
205 { | 222 { |
206 return $this->data['session_attributes']; | 223 return $this->data['session_attributes']->getValue(); |
207 } | 224 } |
208 | 225 |
209 public function getFlashes() | 226 public function getFlashes() |
210 { | 227 { |
211 return $this->data['flashes']; | 228 return $this->data['flashes']->getValue(); |
212 } | 229 } |
213 | 230 |
214 public function getContent() | 231 public function getContent() |
215 { | 232 { |
216 return $this->data['content']; | 233 return $this->data['content']; |
253 return $this->data['route']; | 270 return $this->data['route']; |
254 } | 271 } |
255 | 272 |
256 public function getIdentifier() | 273 public function getIdentifier() |
257 { | 274 { |
258 return $this->data['route'] ?: (is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']); | 275 return $this->data['identifier']; |
259 } | 276 } |
260 | 277 |
261 /** | 278 /** |
262 * Gets the route parameters. | 279 * Gets the route parameters. |
263 * | 280 * |
265 * | 282 * |
266 * @return array The parameters | 283 * @return array The parameters |
267 */ | 284 */ |
268 public function getRouteParams() | 285 public function getRouteParams() |
269 { | 286 { |
270 if (!isset($this->data['request_attributes']['_route_params'])) { | 287 return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params']->getValue() : array(); |
271 return array(); | |
272 } | |
273 | |
274 $data = $this->data['request_attributes']['_route_params']; | |
275 $rawData = $data->getRawData(); | |
276 if (!isset($rawData[1])) { | |
277 return array(); | |
278 } | |
279 | |
280 $params = array(); | |
281 foreach ($rawData[1] as $k => $v) { | |
282 $params[$k] = $data->seek($k); | |
283 } | |
284 | |
285 return $params; | |
286 } | 288 } |
287 | 289 |
288 /** | 290 /** |
289 * Gets the parsed controller. | 291 * Gets the parsed controller. |
290 * | 292 * |
312 $this->controllers[$event->getRequest()] = $event->getController(); | 314 $this->controllers[$event->getRequest()] = $event->getController(); |
313 } | 315 } |
314 | 316 |
315 public function onKernelResponse(FilterResponseEvent $event) | 317 public function onKernelResponse(FilterResponseEvent $event) |
316 { | 318 { |
317 if (!$event->isMasterRequest() || !$event->getRequest()->hasSession() || !$event->getRequest()->getSession()->isStarted()) { | 319 if (!$event->isMasterRequest()) { |
318 return; | 320 return; |
319 } | 321 } |
320 | 322 |
321 if ($event->getRequest()->getSession()->has('sf_redirect')) { | 323 if ($event->getRequest()->cookies->has('sf_redirect')) { |
322 $event->getRequest()->attributes->set('_redirected', true); | 324 $event->getRequest()->attributes->set('_redirected', true); |
323 } | 325 } |
324 } | 326 } |
325 | 327 |
326 public static function getSubscribedEvents() | 328 public static function getSubscribedEvents() |