[ Index ]

PHP Cross Reference of phpBB-3.2.11-deutsch

title

Body

[close]

/vendor/symfony/http-kernel/DataCollector/ -> RequestDataCollector.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of the Symfony package.
   5   *
   6   * (c) Fabien Potencier <fabien@symfony.com>
   7   *
   8   * For the full copyright and license information, please view the LICENSE
   9   * file that was distributed with this source code.
  10   */
  11  
  12  namespace Symfony\Component\HttpKernel\DataCollector;
  13  
  14  use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15  use Symfony\Component\HttpFoundation\ParameterBag;
  16  use Symfony\Component\HttpFoundation\Request;
  17  use Symfony\Component\HttpFoundation\Response;
  18  use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  19  use Symfony\Component\HttpKernel\KernelEvents;
  20  
  21  /**
  22   * @author Fabien Potencier <fabien@symfony.com>
  23   */
  24  class RequestDataCollector extends DataCollector implements EventSubscriberInterface
  25  {
  26      protected $controllers;
  27  
  28      public function __construct()
  29      {
  30          $this->controllers = new \SplObjectStorage();
  31      }
  32  
  33      /**
  34       * {@inheritdoc}
  35       */
  36      public function collect(Request $request, Response $response, \Exception $exception = null)
  37      {
  38          $responseHeaders = $response->headers->all();
  39          foreach ($response->headers->getCookies() as $cookie) {
  40              $responseHeaders['set-cookie'][] = (string) $cookie;
  41          }
  42  
  43          // attributes are serialized and as they can be anything, they need to be converted to strings.
  44          $attributes = array();
  45          foreach ($request->attributes->all() as $key => $value) {
  46              if ('_route' === $key && \is_object($value)) {
  47                  $attributes[$key] = $this->varToString($value->getPath());
  48              } elseif ('_route_params' === $key) {
  49                  // we need to keep route params as an array (see getRouteParams())
  50                  foreach ($value as $k => $v) {
  51                      $value[$k] = $this->varToString($v);
  52                  }
  53                  $attributes[$key] = $value;
  54              } else {
  55                  $attributes[$key] = $this->varToString($value);
  56              }
  57          }
  58  
  59          $content = null;
  60          try {
  61              $content = $request->getContent();
  62          } catch (\LogicException $e) {
  63              // the user already got the request content as a resource
  64              $content = false;
  65          }
  66  
  67          $sessionMetadata = array();
  68          $sessionAttributes = array();
  69          $flashes = array();
  70          if ($request->hasSession()) {
  71              $session = $request->getSession();
  72              if ($session->isStarted()) {
  73                  $sessionMetadata['Created'] = date(DATE_RFC822, $session->getMetadataBag()->getCreated());
  74                  $sessionMetadata['Last used'] = date(DATE_RFC822, $session->getMetadataBag()->getLastUsed());
  75                  $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
  76                  $sessionAttributes = $session->all();
  77                  $flashes = $session->getFlashBag()->peekAll();
  78              }
  79          }
  80  
  81          $statusCode = $response->getStatusCode();
  82  
  83          $this->data = array(
  84              'format' => $request->getRequestFormat(),
  85              'content' => $content,
  86              'content_type' => $response->headers->get('Content-Type', 'text/html'),
  87              'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
  88              'status_code' => $statusCode,
  89              'request_query' => $request->query->all(),
  90              'request_request' => $request->request->all(),
  91              'request_headers' => $request->headers->all(),
  92              'request_server' => $request->server->all(),
  93              'request_cookies' => $request->cookies->all(),
  94              'request_attributes' => $attributes,
  95              'response_headers' => $responseHeaders,
  96              'session_metadata' => $sessionMetadata,
  97              'session_attributes' => $sessionAttributes,
  98              'flashes' => $flashes,
  99              '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                  $value = array_map(function ($v) { return isset($v[0]) && !isset($v[1]) ? $v[0] : $v; }, $value);
 122              }
 123              if ('request_server' !== $key && 'request_cookies' !== $key) {
 124                  $this->data[$key] = $value;
 125              }
 126          }
 127  
 128          if (isset($this->controllers[$request])) {
 129              $controller = $this->controllers[$request];
 130              if (\is_array($controller)) {
 131                  try {
 132                      $r = new \ReflectionMethod($controller[0], $controller[1]);
 133                      $this->data['controller'] = array(
 134                          'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
 135                          'method' => $controller[1],
 136                          'file' => $r->getFileName(),
 137                          'line' => $r->getStartLine(),
 138                      );
 139                  } catch (\ReflectionException $e) {
 140                      if (\is_callable($controller)) {
 141                          // using __call or  __callStatic
 142                          $this->data['controller'] = array(
 143                              'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
 144                              'method' => $controller[1],
 145                              'file' => 'n/a',
 146                              'line' => 'n/a',
 147                          );
 148                      }
 149                  }
 150              } elseif ($controller instanceof \Closure) {
 151                  $r = new \ReflectionFunction($controller);
 152                  $this->data['controller'] = array(
 153                      'class' => $r->getName(),
 154                      'method' => null,
 155                      'file' => $r->getFileName(),
 156                      'line' => $r->getStartLine(),
 157                  );
 158              } elseif (\is_object($controller)) {
 159                  $r = new \ReflectionClass($controller);
 160                  $this->data['controller'] = array(
 161                      'class' => $r->getName(),
 162                      'method' => null,
 163                      'file' => $r->getFileName(),
 164                      'line' => $r->getStartLine(),
 165                  );
 166              } else {
 167                  $this->data['controller'] = (string) $controller ?: 'n/a';
 168              }
 169              unset($this->controllers[$request]);
 170          }
 171      }
 172  
 173      public function getPathInfo()
 174      {
 175          return $this->data['path_info'];
 176      }
 177  
 178      public function getRequestRequest()
 179      {
 180          return new ParameterBag($this->data['request_request']);
 181      }
 182  
 183      public function getRequestQuery()
 184      {
 185          return new ParameterBag($this->data['request_query']);
 186      }
 187  
 188      public function getRequestHeaders()
 189      {
 190          return new ParameterBag($this->data['request_headers']);
 191      }
 192  
 193      public function getRequestServer()
 194      {
 195          return new ParameterBag($this->data['request_server']);
 196      }
 197  
 198      public function getRequestCookies()
 199      {
 200          return new ParameterBag($this->data['request_cookies']);
 201      }
 202  
 203      public function getRequestAttributes()
 204      {
 205          return new ParameterBag($this->data['request_attributes']);
 206      }
 207  
 208      public function getResponseHeaders()
 209      {
 210          return new ParameterBag($this->data['response_headers']);
 211      }
 212  
 213      public function getSessionMetadata()
 214      {
 215          return $this->data['session_metadata'];
 216      }
 217  
 218      public function getSessionAttributes()
 219      {
 220          return $this->data['session_attributes'];
 221      }
 222  
 223      public function getFlashes()
 224      {
 225          return $this->data['flashes'];
 226      }
 227  
 228      public function getContent()
 229      {
 230          return $this->data['content'];
 231      }
 232  
 233      public function getContentType()
 234      {
 235          return $this->data['content_type'];
 236      }
 237  
 238      public function getStatusText()
 239      {
 240          return $this->data['status_text'];
 241      }
 242  
 243      public function getStatusCode()
 244      {
 245          return $this->data['status_code'];
 246      }
 247  
 248      public function getFormat()
 249      {
 250          return $this->data['format'];
 251      }
 252  
 253      public function getLocale()
 254      {
 255          return $this->data['locale'];
 256      }
 257  
 258      /**
 259       * Gets the route name.
 260       *
 261       * The _route request attributes is automatically set by the Router Matcher.
 262       *
 263       * @return string The route
 264       */
 265      public function getRoute()
 266      {
 267          return isset($this->data['request_attributes']['_route']) ? $this->data['request_attributes']['_route'] : '';
 268      }
 269  
 270      /**
 271       * Gets the route parameters.
 272       *
 273       * The _route_params request attributes is automatically set by the RouterListener.
 274       *
 275       * @return array The parameters
 276       */
 277      public function getRouteParams()
 278      {
 279          return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params'] : array();
 280      }
 281  
 282      /**
 283       * Gets the controller.
 284       *
 285       * @return string The controller as a string
 286       */
 287      public function getController()
 288      {
 289          return $this->data['controller'];
 290      }
 291  
 292      public function onKernelController(FilterControllerEvent $event)
 293      {
 294          $this->controllers[$event->getRequest()] = $event->getController();
 295      }
 296  
 297      public static function getSubscribedEvents()
 298      {
 299          return array(KernelEvents::CONTROLLER => 'onKernelController');
 300      }
 301  
 302      /**
 303       * {@inheritdoc}
 304       */
 305      public function getName()
 306      {
 307          return 'request';
 308      }
 309  }


Generated: Wed Nov 11 20:33:01 2020 Cross-referenced by PHPXref 0.7.1