Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
RequestDataCollector.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\HttpKernel\DataCollector;
013
014 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
015 use Symfony\Component\HttpFoundation\Cookie;
016 use Symfony\Component\HttpFoundation\ParameterBag;
017 use Symfony\Component\HttpFoundation\Request;
018 use Symfony\Component\HttpFoundation\Response;
019 use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
020 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
021 use Symfony\Component\HttpKernel\KernelEvents;
022
023 /**
024 * @author Fabien Potencier <fabien@symfony.com>
025 */
026 class RequestDataCollector extends DataCollector implements EventSubscriberInterface, LateDataCollectorInterface
027 {
028 protected $controllers;
029
030 public function __construct()
031 {
032 $this->controllers = new \SplObjectStorage();
033 }
034
035 /**
036 * {@inheritdoc}
037 */
038 public function collect(Request $request, Response $response, \Exception $exception = null)
039 {
040 // attributes are serialized and as they can be anything, they need to be converted to strings.
041 $attributes = [];
042 $route = '';
043 foreach ($request->attributes->all() as $key => $value) {
044 if ('_route' === $key) {
045 $route = \is_object($value) ? $value->getPath() : $value;
046 $attributes[$key] = $route;
047 } else {
048 $attributes[$key] = $value;
049 }
050 }
051
052 try {
053 $content = $request->getContent();
054 } catch (\LogicException $e) {
055 // the user already got the request content as a resource
056 $content = false;
057 }
058
059 $sessionMetadata = [];
060 $sessionAttributes = [];
061 $flashes = [];
062 if ($request->hasSession()) {
063 $session = $request->getSession();
064 if ($session->isStarted()) {
065 $sessionMetadata['Created'] = date(\DATE_RFC822, $session->getMetadataBag()->getCreated());
066 $sessionMetadata['Last used'] = date(\DATE_RFC822, $session->getMetadataBag()->getLastUsed());
067 $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
068 $sessionAttributes = $session->all();
069 $flashes = $session->getFlashBag()->peekAll();
070 }
071 }
072
073 $statusCode = $response->getStatusCode();
074
075 $responseCookies = [];
076 foreach ($response->headers->getCookies() as $cookie) {
077 $responseCookies[$cookie->getName()] = $cookie;
078 }
079
080 $this->data = [
081 'method' => $request->getMethod(),
082 'format' => $request->getRequestFormat(),
083 'content' => $content,
084 'content_type' => $response->headers->get('Content-Type', 'text/html'),
085 'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
086 'status_code' => $statusCode,
087 'request_query' => $request->query->all(),
088 'request_request' => $request->request->all(),
089 'request_headers' => $request->headers->all(),
090 'request_server' => $request->server->all(),
091 'request_cookies' => $request->cookies->all(),
092 'request_attributes' => $attributes,
093 'route' => $route,
094 'response_headers' => $response->headers->all(),
095 'response_cookies' => $responseCookies,
096 'session_metadata' => $sessionMetadata,
097 'session_attributes' => $sessionAttributes,
098 'flashes' => $flashes,
099 'path_info' => $request->getPathInfo(),
100 'controller' => 'n/a',
101 'locale' => $request->getLocale(),
102 ];
103
104 if (isset($this->data['request_headers']['php-auth-pw'])) {
105 $this->data['request_headers']['php-auth-pw'] = '******';
106 }
107
108 if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
109 $this->data['request_server']['PHP_AUTH_PW'] = '******';
110 }
111
112 if (isset($this->data['request_request']['_password'])) {
113 $this->data['request_request']['_password'] = '******';
114 }
115
116 foreach ($this->data as $key => $value) {
117 if (!\is_array($value)) {
118 continue;
119 }
120 if ('request_headers' === $key || 'response_headers' === $key) {
121 $this->data[$key] = array_map(function ($v) { return isset($v[0]) && !isset($v[1]) ? $v[0] : $v; }, $value);
122 }
123 }
124
125 if (isset($this->controllers[$request])) {
126 $this->data['controller'] = $this->parseController($this->controllers[$request]);
127 unset($this->controllers[$request]);
128 }
129
130 if ($request->attributes->has('_redirected') && $redirectCookie = $request->cookies->get('sf_redirect')) {
131 $this->data['redirect'] = json_decode($redirectCookie, true);
132
133 $response->headers->clearCookie('sf_redirect');
134 }
135
136 if ($response->isRedirect()) {
137 $response->headers->setCookie(new Cookie(
138 'sf_redirect',
139 json_encode([
140 'token' => $response->headers->get('x-debug-token'),
141 'route' => $request->attributes->get('_route', 'n/a'),
142 'method' => $request->getMethod(),
143 'controller' => $this->parseController($request->attributes->get('_controller')),
144 'status_code' => $statusCode,
145 'status_text' => Response::$statusTexts[(int) $statusCode],
146 ])
147 ));
148 }
149
150 $this->data['identifier'] = $this->data['route'] ?: (\is_array($this->data['controller']) ? $this->data['controller']['class'].'::'.$this->data['controller']['method'].'()' : $this->data['controller']);
151 }
152
153 public function lateCollect()
154 {
155 $this->data = $this->cloneVar($this->data);
156 }
157
158 public function reset()
159 {
160 $this->data = [];
161 $this->controllers = new \SplObjectStorage();
162 }
163
164 public function getMethod()
165 {
166 return $this->data['method'];
167 }
168
169 public function getPathInfo()
170 {
171 return $this->data['path_info'];
172 }
173
174 public function getRequestRequest()
175 {
176 return new ParameterBag($this->data['request_request']->getValue());
177 }
178
179 public function getRequestQuery()
180 {
181 return new ParameterBag($this->data['request_query']->getValue());
182 }
183
184 public function getRequestHeaders()
185 {
186 return new ParameterBag($this->data['request_headers']->getValue());
187 }
188
189 public function getRequestServer($raw = false)
190 {
191 return new ParameterBag($this->data['request_server']->getValue($raw));
192 }
193
194 public function getRequestCookies($raw = false)
195 {
196 return new ParameterBag($this->data['request_cookies']->getValue($raw));
197 }
198
199 public function getRequestAttributes()
200 {
201 return new ParameterBag($this->data['request_attributes']->getValue());
202 }
203
204 public function getResponseHeaders()
205 {
206 return new ParameterBag($this->data['response_headers']->getValue());
207 }
208
209 public function getResponseCookies()
210 {
211 return new ParameterBag($this->data['response_cookies']->getValue());
212 }
213
214 public function getSessionMetadata()
215 {
216 return $this->data['session_metadata']->getValue();
217 }
218
219 public function getSessionAttributes()
220 {
221 return $this->data['session_attributes']->getValue();
222 }
223
224 public function getFlashes()
225 {
226 return $this->data['flashes']->getValue();
227 }
228
229 public function getContent()
230 {
231 return $this->data['content'];
232 }
233
234 public function getContentType()
235 {
236 return $this->data['content_type'];
237 }
238
239 public function getStatusText()
240 {
241 return $this->data['status_text'];
242 }
243
244 public function getStatusCode()
245 {
246 return $this->data['status_code'];
247 }
248
249 public function getFormat()
250 {
251 return $this->data['format'];
252 }
253
254 public function getLocale()
255 {
256 return $this->data['locale'];
257 }
258
259 /**
260 * Gets the route name.
261 *
262 * The _route request attributes is automatically set by the Router Matcher.
263 *
264 * @return string The route
265 */
266 public function getRoute()
267 {
268 return $this->data['route'];
269 }
270
271 public function getIdentifier()
272 {
273 return $this->data['identifier'];
274 }
275
276 /**
277 * Gets the route parameters.
278 *
279 * The _route_params request attributes is automatically set by the RouterListener.
280 *
281 * @return array The parameters
282 */
283 public function getRouteParams()
284 {
285 return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params']->getValue() : [];
286 }
287
288 /**
289 * Gets the parsed controller.
290 *
291 * @return array|string The controller as a string or array of data
292 * with keys 'class', 'method', 'file' and 'line'
293 */
294 public function getController()
295 {
296 return $this->data['controller'];
297 }
298
299 /**
300 * Gets the previous request attributes.
301 *
302 * @return array|bool A legacy array of data from the previous redirection response
303 * or false otherwise
304 */
305 public function getRedirect()
306 {
307 return isset($this->data['redirect']) ? $this->data['redirect'] : false;
308 }
309
310 public function onKernelController(FilterControllerEvent $event)
311 {
312 $this->controllers[$event->getRequest()] = $event->getController();
313 }
314
315 public function onKernelResponse(FilterResponseEvent $event)
316 {
317 if (!$event->isMasterRequest()) {
318 return;
319 }
320
321 if ($event->getRequest()->cookies->has('sf_redirect')) {
322 $event->getRequest()->attributes->set('_redirected', true);
323 }
324 }
325
326 public static function getSubscribedEvents()
327 {
328 return [
329 KernelEvents::CONTROLLER => 'onKernelController',
330 KernelEvents::RESPONSE => 'onKernelResponse',
331 ];
332 }
333
334 /**
335 * {@inheritdoc}
336 */
337 public function getName()
338 {
339 return 'request';
340 }
341
342 /**
343 * Parse a controller.
344 *
345 * @param mixed $controller The controller to parse
346 *
347 * @return array|string An array of controller data or a simple string
348 */
349 protected function parseController($controller)
350 {
351 if (\is_string($controller) && false !== strpos($controller, '::')) {
352 $controller = explode('::', $controller);
353 }
354
355 if (\is_array($controller)) {
356 try {
357 $r = new \ReflectionMethod($controller[0], $controller[1]);
358
359 return [
360 'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
361 'method' => $controller[1],
362 'file' => $r->getFileName(),
363 'line' => $r->getStartLine(),
364 ];
365 } catch (\ReflectionException $e) {
366 if (\is_callable($controller)) {
367 // using __call or __callStatic
368 return [
369 'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
370 'method' => $controller[1],
371 'file' => 'n/a',
372 'line' => 'n/a',
373 ];
374 }
375 }
376 }
377
378 if ($controller instanceof \Closure) {
379 $r = new \ReflectionFunction($controller);
380
381 $controller = [
382 'class' => $r->getName(),
383 'method' => null,
384 'file' => $r->getFileName(),
385 'line' => $r->getStartLine(),
386 ];
387
388 if (false !== strpos($r->name, '{closure}')) {
389 return $controller;
390 }
391 $controller['method'] = $r->name;
392
393 if ($class = $r->getClosureScopeClass()) {
394 $controller['class'] = $class->name;
395 } else {
396 return $r->name;
397 }
398
399 return $controller;
400 }
401
402 if (\is_object($controller)) {
403 $r = new \ReflectionClass($controller);
404
405 return [
406 'class' => $r->getName(),
407 'method' => null,
408 'file' => $r->getFileName(),
409 'line' => $r->getStartLine(),
410 ];
411 }
412
413 return \is_string($controller) ? $controller : 'n/a';
414 }
415 }
416