public function Response::prepare

Prepares the Response before it is sent to the client.

This method tweaks the Response to ensure that it is compliant with RFC 2616. Most of the changes are based on the Request that is "associated" with this Response.

Parameters

Request $request A Request instance:

Return value

Response The current response.

2 calls to Response::prepare()
2 methods override Response::prepare()

File

drupal/core/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php, line 204

Class

Response
Response represents an HTTP response.

Namespace

Symfony\Component\HttpFoundation

Code

public function prepare(Request $request) {
  $headers = $this->headers;
  if ($this
    ->isInformational() || in_array($this->statusCode, array(
    204,
    304,
  ))) {
    $this
      ->setContent(null);
  }

  // Content-type based on the Request
  if (!$headers
    ->has('Content-Type')) {
    $format = $request
      ->getRequestFormat();
    if (null !== $format && ($mimeType = $request
      ->getMimeType($format))) {
      $headers
        ->set('Content-Type', $mimeType);
    }
  }

  // Fix Content-Type
  $charset = $this->charset ?: 'UTF-8';
  if (!$headers
    ->has('Content-Type')) {
    $headers
      ->set('Content-Type', 'text/html; charset=' . $charset);
  }
  elseif (0 === strpos($headers
    ->get('Content-Type'), 'text/') && false === strpos($headers
    ->get('Content-Type'), 'charset')) {

    // add the charset
    $headers
      ->set('Content-Type', $headers
      ->get('Content-Type') . '; charset=' . $charset);
  }

  // Fix Content-Length
  if ($headers
    ->has('Transfer-Encoding')) {
    $headers
      ->remove('Content-Length');
  }
  if ('HEAD' === $request
    ->getMethod()) {

    // cf. RFC2616 14.13
    $length = $headers
      ->get('Content-Length');
    $this
      ->setContent(null);
    if ($length) {
      $headers
        ->set('Content-Length', $length);
    }
  }
  return $this;
}