[ Index ]

PHP Cross Reference of phpBB-3.1.12-deutsch

title

Body

[close]

/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/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\HttpFoundation\ParameterBag;
  15  use Symfony\Component\HttpFoundation\HeaderBag;
  16  use Symfony\Component\HttpFoundation\Request;
  17  use Symfony\Component\HttpFoundation\Response;
  18  use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  19  use Symfony\Component\HttpKernel\KernelEvents;
  20  use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  21  use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  22  
  23  /**
  24   * RequestDataCollector.
  25   *
  26   * @author Fabien Potencier <fabien@symfony.com>
  27   */
  28  class RequestDataCollector extends DataCollector implements EventSubscriberInterface
  29  {
  30      protected $controllers;
  31  
  32      public function __construct()
  33      {
  34          $this->controllers = new \SplObjectStorage();
  35      }
  36  
  37      /**
  38       * {@inheritdoc}
  39       */
  40      public function collect(Request $request, Response $response, \Exception $exception = null)
  41      {
  42          $responseHeaders = $response->headers->all();
  43          $cookies = array();
  44          foreach ($response->headers->getCookies() as $cookie) {
  45              $cookies[] = $this->getCookieHeader($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly());
  46          }
  47          if (count($cookies) > 0) {
  48              $responseHeaders['Set-Cookie'] = $cookies;
  49          }
  50  
  51          $attributes = array();
  52          foreach ($request->attributes->all() as $key => $value) {
  53              if ('_route' === $key && is_object($value)) {
  54                  $attributes['_route'] = $this->varToString($value->getPath());
  55              } elseif ('_route_params' === $key) {
  56                  foreach ($value as $key => $v) {
  57                      $attributes['_route_params'][$key] = $this->varToString($v);
  58                  }
  59              } else {
  60                  $attributes[$key] = $this->varToString($value);
  61              }
  62          }
  63  
  64          $content = null;
  65          try {
  66              $content = $request->getContent();
  67          } catch (\LogicException $e) {
  68              // the user already got the request content as a resource
  69              $content = false;
  70          }
  71  
  72          $sessionMetadata = array();
  73          $sessionAttributes = array();
  74          $flashes = array();
  75          if ($request->hasSession()) {
  76              $session = $request->getSession();
  77              if ($session->isStarted()) {
  78                  $sessionMetadata['Created'] = date(DATE_RFC822, $session->getMetadataBag()->getCreated());
  79                  $sessionMetadata['Last used'] = date(DATE_RFC822, $session->getMetadataBag()->getLastUsed());
  80                  $sessionMetadata['Lifetime'] = $session->getMetadataBag()->getLifetime();
  81                  $sessionAttributes = $session->all();
  82                  $flashes = $session->getFlashBag()->peekAll();
  83              }
  84          }
  85  
  86          $statusCode = $response->getStatusCode();
  87  
  88          $this->data = array(
  89              'format' => $request->getRequestFormat(),
  90              'content' => $content,
  91              'content_type' => $response->headers->get('Content-Type', 'text/html'),
  92              'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '',
  93              'status_code' => $statusCode,
  94              'request_query' => $request->query->all(),
  95              'request_request' => $request->request->all(),
  96              'request_headers' => $request->headers->all(),
  97              'request_server' => $request->server->all(),
  98              'request_cookies' => $request->cookies->all(),
  99              'request_attributes' => $attributes,
 100              'response_headers' => $responseHeaders,
 101              'session_metadata' => $sessionMetadata,
 102              'session_attributes' => $sessionAttributes,
 103              'flashes' => $flashes,
 104              'path_info' => $request->getPathInfo(),
 105              'controller' => 'n/a',
 106              'locale' => $request->getLocale(),
 107          );
 108  
 109          if (isset($this->data['request_headers']['php-auth-pw'])) {
 110              $this->data['request_headers']['php-auth-pw'] = '******';
 111          }
 112  
 113          if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
 114              $this->data['request_server']['PHP_AUTH_PW'] = '******';
 115          }
 116  
 117          if (isset($this->controllers[$request])) {
 118              $controller = $this->controllers[$request];
 119              if (is_array($controller)) {
 120                  try {
 121                      $r = new \ReflectionMethod($controller[0], $controller[1]);
 122                      $this->data['controller'] = array(
 123                          'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
 124                          'method' => $controller[1],
 125                          'file' => $r->getFileName(),
 126                          'line' => $r->getStartLine(),
 127                      );
 128                  } catch (\ReflectionException $e) {
 129                      if (is_callable($controller)) {
 130                          // using __call or  __callStatic
 131                          $this->data['controller'] = array(
 132                              'class' => is_object($controller[0]) ? get_class($controller[0]) : $controller[0],
 133                              'method' => $controller[1],
 134                              'file' => 'n/a',
 135                              'line' => 'n/a',
 136                          );
 137                      }
 138                  }
 139              } elseif ($controller instanceof \Closure) {
 140                  $r = new \ReflectionFunction($controller);
 141                  $this->data['controller'] = array(
 142                      'class' => $r->getName(),
 143                      'method' => null,
 144                      'file' => $r->getFileName(),
 145                      'line' => $r->getStartLine(),
 146                  );
 147              } else {
 148                  $this->data['controller'] = (string) $controller ?: 'n/a';
 149              }
 150              unset($this->controllers[$request]);
 151          }
 152      }
 153  
 154      public function getPathInfo()
 155      {
 156          return $this->data['path_info'];
 157      }
 158  
 159      public function getRequestRequest()
 160      {
 161          return new ParameterBag($this->data['request_request']);
 162      }
 163  
 164      public function getRequestQuery()
 165      {
 166          return new ParameterBag($this->data['request_query']);
 167      }
 168  
 169      public function getRequestHeaders()
 170      {
 171          return new HeaderBag($this->data['request_headers']);
 172      }
 173  
 174      public function getRequestServer()
 175      {
 176          return new ParameterBag($this->data['request_server']);
 177      }
 178  
 179      public function getRequestCookies()
 180      {
 181          return new ParameterBag($this->data['request_cookies']);
 182      }
 183  
 184      public function getRequestAttributes()
 185      {
 186          return new ParameterBag($this->data['request_attributes']);
 187      }
 188  
 189      public function getResponseHeaders()
 190      {
 191          return new ResponseHeaderBag($this->data['response_headers']);
 192      }
 193  
 194      public function getSessionMetadata()
 195      {
 196          return $this->data['session_metadata'];
 197      }
 198  
 199      public function getSessionAttributes()
 200      {
 201          return $this->data['session_attributes'];
 202      }
 203  
 204      public function getFlashes()
 205      {
 206          return $this->data['flashes'];
 207      }
 208  
 209      public function getContent()
 210      {
 211          return $this->data['content'];
 212      }
 213  
 214      public function getContentType()
 215      {
 216          return $this->data['content_type'];
 217      }
 218  
 219      public function getStatusText()
 220      {
 221          return $this->data['status_text'];
 222      }
 223  
 224      public function getStatusCode()
 225      {
 226          return $this->data['status_code'];
 227      }
 228  
 229      public function getFormat()
 230      {
 231          return $this->data['format'];
 232      }
 233  
 234      public function getLocale()
 235      {
 236          return $this->data['locale'];
 237      }
 238  
 239      /**
 240       * Gets the route name.
 241       *
 242       * The _route request attributes is automatically set by the Router Matcher.
 243       *
 244       * @return string The route
 245       */
 246      public function getRoute()
 247      {
 248          return isset($this->data['request_attributes']['_route']) ? $this->data['request_attributes']['_route'] : '';
 249      }
 250  
 251      /**
 252       * Gets the route parameters.
 253       *
 254       * The _route_params request attributes is automatically set by the RouterListener.
 255       *
 256       * @return array The parameters
 257       */
 258      public function getRouteParams()
 259      {
 260          return isset($this->data['request_attributes']['_route_params']) ? $this->data['request_attributes']['_route_params'] : array();
 261      }
 262  
 263      /**
 264       * Gets the controller.
 265       *
 266       * @return string The controller as a string
 267       */
 268      public function getController()
 269      {
 270          return $this->data['controller'];
 271      }
 272  
 273      public function onKernelController(FilterControllerEvent $event)
 274      {
 275          $this->controllers[$event->getRequest()] = $event->getController();
 276      }
 277  
 278      public static function getSubscribedEvents()
 279      {
 280          return array(KernelEvents::CONTROLLER => 'onKernelController');
 281      }
 282  
 283      /**
 284       * {@inheritdoc}
 285       */
 286      public function getName()
 287      {
 288          return 'request';
 289      }
 290  
 291      private function getCookieHeader($name, $value, $expires, $path, $domain, $secure, $httponly)
 292      {
 293          $cookie = sprintf('%s=%s', $name, urlencode($value));
 294  
 295          if (0 !== $expires) {
 296              if (is_numeric($expires)) {
 297                  $expires = (int) $expires;
 298              } elseif ($expires instanceof \DateTime) {
 299                  $expires = $expires->getTimestamp();
 300              } else {
 301                  $tmp = strtotime($expires);
 302                  if (false === $tmp || -1 == $tmp) {
 303                      throw new \InvalidArgumentException(sprintf('The "expires" cookie parameter is not valid (%s).', $expires));
 304                  }
 305                  $expires = $tmp;
 306              }
 307  
 308              $cookie .= '; expires='.str_replace('+0000', '', \DateTime::createFromFormat('U', $expires, new \DateTimeZone('GMT'))->format('D, d-M-Y H:i:s T'));
 309          }
 310  
 311          if ($domain) {
 312              $cookie .= '; domain='.$domain;
 313          }
 314  
 315          $cookie .= '; path='.$path;
 316  
 317          if ($secure) {
 318              $cookie .= '; secure';
 319          }
 320  
 321          if ($httponly) {
 322              $cookie .= '; httponly';
 323          }
 324  
 325          return $cookie;
 326      }
 327  }


Generated: Thu Jan 11 00:25:41 2018 Cross-referenced by PHPXref 0.7.1