Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. RequestDataCollector.php

function RequestDataCollector::collect

Overrides DataCollectorInterface::collect

File

vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php, line 46

Class

RequestDataCollector
@author Fabien Potencier <fabien@symfony.com>

Namespace

Symfony\Component\HttpKernel\DataCollector

Code

public function collect(Request $request, Response $response, ?\Throwable $exception = null) : void {
    // attributes are serialized and as they can be anything, they need to be converted to strings.
    $attributes = [];
    $route = '';
    foreach ($request->attributes
        ->all() as $key => $value) {
        if ('_route' === $key) {
            $route = \is_object($value) ? $value->getPath() : $value;
            $attributes[$key] = $route;
        }
        else {
            $attributes[$key] = $value;
        }
    }
    $content = $request->getContent();
    $sessionMetadata = [];
    $sessionAttributes = [];
    $flashes = [];
    if (!$request->attributes
        ->getBoolean('_stateless') && $request->hasSession()) {
        $session = $request->getSession();
        if ($session->isStarted()) {
            $sessionMetadata['Created'] = date(\DATE_RFC822, $session->getMetadataBag()
                ->getCreated());
            $sessionMetadata['Last used'] = date(\DATE_RFC822, $session->getMetadataBag()
                ->getLastUsed());
            $sessionMetadata['Lifetime'] = $session->getMetadataBag()
                ->getLifetime();
            $sessionAttributes = $session->all();
            $flashes = $session->getFlashBag()
                ->peekAll();
        }
    }
    $statusCode = $response->getStatusCode();
    $responseCookies = [];
    foreach ($response->headers
        ->getCookies() as $cookie) {
        $responseCookies[$cookie->getName()] = $cookie;
    }
    $dotenvVars = [];
    foreach (explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? $_ENV['SYMFONY_DOTENV_VARS'] ?? '') as $name) {
        if ('' !== $name && isset($_ENV[$name])) {
            $dotenvVars[$name] = $_ENV[$name];
        }
    }
    $this->data = [
        'method' => $request->getMethod(),
        'format' => $request->getRequestFormat(),
        'content_type' => $response->headers
            ->get('Content-Type', 'text/html'),
        'status_text' => Response::$statusTexts[$statusCode] ?? '',
        'status_code' => $statusCode,
        'request_query' => $request->query
            ->all(),
        'request_request' => $request->request
            ->all(),
        'request_files' => $request->files
            ->all(),
        'request_headers' => $request->headers
            ->all(),
        'request_server' => $request->server
            ->all(),
        'request_cookies' => $request->cookies
            ->all(),
        'request_attributes' => $attributes,
        'route' => $route,
        'response_headers' => $response->headers
            ->all(),
        'response_cookies' => $responseCookies,
        'session_metadata' => $sessionMetadata,
        'session_attributes' => $sessionAttributes,
        'session_usages' => array_values($this->sessionUsages),
        'stateless_check' => $this->requestStack?->getMainRequest()?->attributes
            ->get('_stateless') ?? false,
        'flashes' => $flashes,
        'path_info' => $request->getPathInfo(),
        'controller' => 'n/a',
        'locale' => $request->getLocale(),
        'dotenv_vars' => $dotenvVars,
    ];
    if (isset($this->data['request_headers']['php-auth-pw'])) {
        $this->data['request_headers']['php-auth-pw'] = '******';
    }
    if (isset($this->data['request_server']['PHP_AUTH_PW'])) {
        $this->data['request_server']['PHP_AUTH_PW'] = '******';
    }
    if (isset($this->data['request_request']['_password'])) {
        $encodedPassword = rawurlencode($this->data['request_request']['_password']);
        $content = str_replace('_password=' . $encodedPassword, '_password=******', $content);
        $this->data['request_request']['_password'] = '******';
    }
    $this->data['content'] = $content;
    foreach ($this->data as $key => $value) {
        if (!\is_array($value)) {
            continue;
        }
        if ('request_headers' === $key || 'response_headers' === $key) {
            $this->data[$key] = array_map(fn($v) => isset($v[0]) && !isset($v[1]) ? $v[0] : $v, $value);
        }
    }
    if (isset($this->controllers[$request])) {
        $this->data['controller'] = $this->parseController($this->controllers[$request]);
        unset($this->controllers[$request]);
    }
    if ($request->attributes
        ->has('_redirected') && ($redirectCookie = $request->cookies
        ->get('sf_redirect'))) {
        $this->data['redirect'] = json_decode($redirectCookie, true);
        $response->headers
            ->clearCookie('sf_redirect');
    }
    if ($response->isRedirect()) {
        $response->headers
            ->setCookie(new Cookie('sf_redirect', json_encode([
            'token' => $response->headers
                ->get('x-debug-token'),
            'route' => $request->attributes
                ->get('_route', 'n/a'),
            'method' => $request->getMethod(),
            'controller' => $this->parseController($request->attributes
                ->get('_controller')),
            'status_code' => $statusCode,
            'status_text' => Response::$statusTexts[$statusCode],
        ]), 0, '/', null, $request->isSecure(), true, false, 'lax'));
    }
    $this->data['identifier'] = $this->data['route'] ?: (\is_array($this->data['controller']) ? $this->data['controller']['class'] . '::' . $this->data['controller']['method'] . '()' : $this->data['controller']);
    if ($response->headers
        ->has('x-previous-debug-token')) {
        $this->data['forward_token'] = $response->headers
            ->get('x-previous-debug-token');
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal