name: Response
class_comment: '# * Response represents an HTTP response.

  # *

  # * @author Fabien Potencier <fabien@symfony.com>'
dependencies: []
properties: []
methods:
- name: __construct
  visibility: public
  parameters:
  - name: content
    default: ''''''
  - name: status
    default: '200'
  - name: headers
    default: '[]'
  comment: "# * Response represents an HTTP response.\n# *\n# * @author Fabien Potencier\
    \ <fabien@symfony.com>\n# */\n# class Response\n# {\n# public const HTTP_CONTINUE\
    \ = 100;\n# public const HTTP_SWITCHING_PROTOCOLS = 101;\n# public const HTTP_PROCESSING\
    \ = 102;            // RFC2518\n# public const HTTP_EARLY_HINTS = 103;       \
    \    // RFC8297\n# public const HTTP_OK = 200;\n# public const HTTP_CREATED =\
    \ 201;\n# public const HTTP_ACCEPTED = 202;\n# public const HTTP_NON_AUTHORITATIVE_INFORMATION\
    \ = 203;\n# public const HTTP_NO_CONTENT = 204;\n# public const HTTP_RESET_CONTENT\
    \ = 205;\n# public const HTTP_PARTIAL_CONTENT = 206;\n# public const HTTP_MULTI_STATUS\
    \ = 207;          // RFC4918\n# public const HTTP_ALREADY_REPORTED = 208;    \
    \  // RFC5842\n# public const HTTP_IM_USED = 226;               // RFC3229\n#\
    \ public const HTTP_MULTIPLE_CHOICES = 300;\n# public const HTTP_MOVED_PERMANENTLY\
    \ = 301;\n# public const HTTP_FOUND = 302;\n# public const HTTP_SEE_OTHER = 303;\n\
    # public const HTTP_NOT_MODIFIED = 304;\n# public const HTTP_USE_PROXY = 305;\n\
    # public const HTTP_RESERVED = 306;\n# public const HTTP_TEMPORARY_REDIRECT =\
    \ 307;\n# public const HTTP_PERMANENTLY_REDIRECT = 308;  // RFC7238\n# public\
    \ const HTTP_BAD_REQUEST = 400;\n# public const HTTP_UNAUTHORIZED = 401;\n# public\
    \ const HTTP_PAYMENT_REQUIRED = 402;\n# public const HTTP_FORBIDDEN = 403;\n#\
    \ public const HTTP_NOT_FOUND = 404;\n# public const HTTP_METHOD_NOT_ALLOWED =\
    \ 405;\n# public const HTTP_NOT_ACCEPTABLE = 406;\n# public const HTTP_PROXY_AUTHENTICATION_REQUIRED\
    \ = 407;\n# public const HTTP_REQUEST_TIMEOUT = 408;\n# public const HTTP_CONFLICT\
    \ = 409;\n# public const HTTP_GONE = 410;\n# public const HTTP_LENGTH_REQUIRED\
    \ = 411;\n# public const HTTP_PRECONDITION_FAILED = 412;\n# public const HTTP_REQUEST_ENTITY_TOO_LARGE\
    \ = 413;\n# public const HTTP_REQUEST_URI_TOO_LONG = 414;\n# public const HTTP_UNSUPPORTED_MEDIA_TYPE\
    \ = 415;\n# public const HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416;\n# public\
    \ const HTTP_EXPECTATION_FAILED = 417;\n# public const HTTP_I_AM_A_TEAPOT = 418;\
    \                                               // RFC2324\n# public const HTTP_MISDIRECTED_REQUEST\
    \ = 421;                                         // RFC7540\n# public const HTTP_UNPROCESSABLE_ENTITY\
    \ = 422;                                        // RFC4918\n# public const HTTP_LOCKED\
    \ = 423;                                                      // RFC4918\n# public\
    \ const HTTP_FAILED_DEPENDENCY = 424;                                        \
    \   // RFC4918\n# public const HTTP_TOO_EARLY = 425;                         \
    \                          // RFC-ietf-httpbis-replay-04\n# public const HTTP_UPGRADE_REQUIRED\
    \ = 426;                                            // RFC2817\n# public const\
    \ HTTP_PRECONDITION_REQUIRED = 428;                                       // RFC6585\n\
    # public const HTTP_TOO_MANY_REQUESTS = 429;                                 \
    \          // RFC6585\n# public const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;\
    \                             // RFC6585\n# public const HTTP_UNAVAILABLE_FOR_LEGAL_REASONS\
    \ = 451;                               // RFC7725\n# public const HTTP_INTERNAL_SERVER_ERROR\
    \ = 500;\n# public const HTTP_NOT_IMPLEMENTED = 501;\n# public const HTTP_BAD_GATEWAY\
    \ = 502;\n# public const HTTP_SERVICE_UNAVAILABLE = 503;\n# public const HTTP_GATEWAY_TIMEOUT\
    \ = 504;\n# public const HTTP_VERSION_NOT_SUPPORTED = 505;\n# public const HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL\
    \ = 506;                        // RFC2295\n# public const HTTP_INSUFFICIENT_STORAGE\
    \ = 507;                                        // RFC4918\n# public const HTTP_LOOP_DETECTED\
    \ = 508;                                               // RFC5842\n# public const\
    \ HTTP_NOT_EXTENDED = 510;                                                // RFC2774\n\
    # public const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511;                   \
    \          // RFC6585\n# \n# /**\n# * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control\n\
    # */\n# private const HTTP_RESPONSE_CACHE_CONTROL_DIRECTIVES = [\n# 'must_revalidate'\
    \ => false,\n# 'no_cache' => false,\n# 'no_store' => false,\n# 'no_transform'\
    \ => false,\n# 'public' => false,\n# 'private' => false,\n# 'proxy_revalidate'\
    \ => false,\n# 'max_age' => true,\n# 's_maxage' => true,\n# 'stale_if_error' =>\
    \ true,         // RFC5861\n# 'stale_while_revalidate' => true, // RFC5861\n#\
    \ 'immutable' => false,\n# 'last_modified' => true,\n# 'etag' => true,\n# ];\n\
    # \n# public ResponseHeaderBag $headers;\n# \n# protected string $content;\n#\
    \ protected string $version;\n# protected int $statusCode;\n# protected string\
    \ $statusText;\n# protected ?string $charset = null;\n# \n# /**\n# * Status codes\
    \ translation table.\n# *\n# * The list of codes is complete according to the\n\
    # * {@link https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\
    \ Hypertext Transfer Protocol (HTTP) Status Code Registry}\n# * (last updated\
    \ 2021-10-01).\n# *\n# * Unless otherwise noted, the status code is defined in\
    \ RFC2616.\n# */\n# public static array $statusTexts = [\n# 100 => 'Continue',\n\
    # 101 => 'Switching Protocols',\n# 102 => 'Processing',            // RFC2518\n\
    # 103 => 'Early Hints',\n# 200 => 'OK',\n# 201 => 'Created',\n# 202 => 'Accepted',\n\
    # 203 => 'Non-Authoritative Information',\n# 204 => 'No Content',\n# 205 => 'Reset\
    \ Content',\n# 206 => 'Partial Content',\n# 207 => 'Multi-Status',          //\
    \ RFC4918\n# 208 => 'Already Reported',      // RFC5842\n# 226 => 'IM Used', \
    \              // RFC3229\n# 300 => 'Multiple Choices',\n# 301 => 'Moved Permanently',\n\
    # 302 => 'Found',\n# 303 => 'See Other',\n# 304 => 'Not Modified',\n# 305 => 'Use\
    \ Proxy',\n# 307 => 'Temporary Redirect',\n# 308 => 'Permanent Redirect',    //\
    \ RFC7238\n# 400 => 'Bad Request',\n# 401 => 'Unauthorized',\n# 402 => 'Payment\
    \ Required',\n# 403 => 'Forbidden',\n# 404 => 'Not Found',\n# 405 => 'Method Not\
    \ Allowed',\n# 406 => 'Not Acceptable',\n# 407 => 'Proxy Authentication Required',\n\
    # 408 => 'Request Timeout',\n# 409 => 'Conflict',\n# 410 => 'Gone',\n# 411 =>\
    \ 'Length Required',\n# 412 => 'Precondition Failed',\n# 413 => 'Content Too Large',\
    \                                           // RFC-ietf-httpbis-semantics\n# 414\
    \ => 'URI Too Long',\n# 415 => 'Unsupported Media Type',\n# 416 => 'Range Not\
    \ Satisfiable',\n# 417 => 'Expectation Failed',\n# 418 => 'I\\'m a teapot',  \
    \                                             // RFC2324\n# 421 => 'Misdirected\
    \ Request',                                         // RFC7540\n# 422 => 'Unprocessable\
    \ Content',                                       // RFC-ietf-httpbis-semantics\n\
    # 423 => 'Locked',                                                      // RFC4918\n\
    # 424 => 'Failed Dependency',                                           // RFC4918\n\
    # 425 => 'Too Early',                                                   // RFC-ietf-httpbis-replay-04\n\
    # 426 => 'Upgrade Required',                                            // RFC2817\n\
    # 428 => 'Precondition Required',                                       // RFC6585\n\
    # 429 => 'Too Many Requests',                                           // RFC6585\n\
    # 431 => 'Request Header Fields Too Large',                             // RFC6585\n\
    # 451 => 'Unavailable For Legal Reasons',                               // RFC7725\n\
    # 500 => 'Internal Server Error',\n# 501 => 'Not Implemented',\n# 502 => 'Bad\
    \ Gateway',\n# 503 => 'Service Unavailable',\n# 504 => 'Gateway Timeout',\n# 505\
    \ => 'HTTP Version Not Supported',\n# 506 => 'Variant Also Negotiates',      \
    \                               // RFC2295\n# 507 => 'Insufficient Storage', \
    \                                       // RFC4918\n# 508 => 'Loop Detected',\
    \                                               // RFC5842\n# 510 => 'Not Extended',\
    \                                                // RFC2774\n# 511 => 'Network\
    \ Authentication Required',                             // RFC6585\n# ];\n# \n\
    # /**\n# * Tracks headers already sent in informational responses.\n# */\n# private\
    \ array $sentHeaders;\n# \n# /**\n# * @param int $status The HTTP status code\
    \ (200 \"OK\" by default)\n# *\n# * @throws \\InvalidArgumentException When the\
    \ HTTP status code is not valid"
- name: __toString
  visibility: public
  parameters: []
  comment: '# * Returns the Response as an HTTP string.

    # *

    # * The string representation of the Response is the same as the

    # * one that will be sent to the client only if the prepare() method

    # * has been called before.

    # *

    # * @see prepare()'
- name: __clone
  visibility: public
  parameters: []
  comment: '# * Clones the current Response instance.'
- name: prepare
  visibility: public
  parameters:
  - name: request
  comment: '# * 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.

    # *

    # * @return $this'
- name: sendHeaders
  visibility: public
  parameters:
  - name: statusCode
    default: 'null'
  comment: '# * Sends HTTP headers.

    # *

    # * @param positive-int|null $statusCode The status code to use, override the
    statusCode property if set and not null

    # *

    # * @return $this'
- name: sendContent
  visibility: public
  parameters: []
  comment: '# * Sends content for the current web response.

    # *

    # * @return $this'
- name: send
  visibility: public
  parameters:
  - name: flush
    default: 'true'
  comment: '# * Sends HTTP headers and content.

    # *

    # * @param bool $flush Whether output buffers should be flushed

    # *

    # * @return $this'
- name: setContent
  visibility: public
  parameters:
  - name: content
  comment: '# * Sets the response content.

    # *

    # * @return $this'
- name: getContent
  visibility: public
  parameters: []
  comment: '# * Gets the current response content.'
- name: setProtocolVersion
  visibility: public
  parameters:
  - name: version
  comment: '# * Sets the HTTP protocol version (1.0 or 1.1).

    # *

    # * @return $this

    # *

    # * @final'
- name: getProtocolVersion
  visibility: public
  parameters: []
  comment: '# * Gets the HTTP protocol version.

    # *

    # * @final'
- name: setStatusCode
  visibility: public
  parameters:
  - name: code
  - name: text
    default: 'null'
  comment: '# * Sets the response status code.

    # *

    # * If the status text is null it will be automatically populated for the known

    # * status codes and left empty otherwise.

    # *

    # * @return $this

    # *

    # * @throws \InvalidArgumentException When the HTTP status code is not valid

    # *

    # * @final'
- name: getStatusCode
  visibility: public
  parameters: []
  comment: '# * Retrieves the status code for the current web response.

    # *

    # * @final'
- name: setCharset
  visibility: public
  parameters:
  - name: charset
  comment: '# * Sets the response charset.

    # *

    # * @return $this

    # *

    # * @final'
- name: getCharset
  visibility: public
  parameters: []
  comment: '# * Retrieves the response charset.

    # *

    # * @final'
- name: isCacheable
  visibility: public
  parameters: []
  comment: '# * Returns true if the response may safely be kept in a shared (surrogate)
    cache.

    # *

    # * Responses marked "private" with an explicit Cache-Control directive are

    # * considered uncacheable.

    # *

    # * Responses with neither a freshness lifetime (Expires, max-age) nor cache

    # * validator (Last-Modified, ETag) are considered uncacheable because there is

    # * no way to tell when or how to remove them from the cache.

    # *

    # * Note that RFC 7231 and RFC 7234 possibly allow for a more permissive implementation,

    # * for example "status codes that are defined as cacheable by default [...]

    # * can be reused by a cache with heuristic expiration unless otherwise indicated"

    # * (https://tools.ietf.org/html/rfc7231#section-6.1)

    # *

    # * @final'
- name: isFresh
  visibility: public
  parameters: []
  comment: '# * Returns true if the response is "fresh".

    # *

    # * Fresh responses may be served from cache without any interaction with the

    # * origin. A response is considered fresh when it includes a Cache-Control/max-age

    # * indicator or Expires header and the calculated age is less than the freshness
    lifetime.

    # *

    # * @final'
- name: isValidateable
  visibility: public
  parameters: []
  comment: '# * Returns true if the response includes headers that can be used to
    validate

    # * the response with the origin server using a conditional GET request.

    # *

    # * @final'
- name: setPrivate
  visibility: public
  parameters: []
  comment: '# * Marks the response as "private".

    # *

    # * It makes the response ineligible for serving other clients.

    # *

    # * @return $this

    # *

    # * @final'
- name: setPublic
  visibility: public
  parameters: []
  comment: '# * Marks the response as "public".

    # *

    # * It makes the response eligible for serving other clients.

    # *

    # * @return $this

    # *

    # * @final'
- name: setImmutable
  visibility: public
  parameters:
  - name: immutable
    default: 'true'
  comment: '# * Marks the response as "immutable".

    # *

    # * @return $this

    # *

    # * @final'
- name: isImmutable
  visibility: public
  parameters: []
  comment: '# * Returns true if the response is marked as "immutable".

    # *

    # * @final'
- name: mustRevalidate
  visibility: public
  parameters: []
  comment: '# * Returns true if the response must be revalidated by shared caches
    once it has become stale.

    # *

    # * This method indicates that the response must not be served stale by a

    # * cache in any circumstance without first revalidating with the origin.

    # * When present, the TTL of the response should not be overridden to be

    # * greater than the value provided by the origin.

    # *

    # * @final'
- name: getDate
  visibility: public
  parameters: []
  comment: '# * Returns the Date header as a DateTime instance.

    # *

    # * @throws \RuntimeException When the header is not parseable

    # *

    # * @final'
- name: setDate
  visibility: public
  parameters:
  - name: date
  comment: '# * Sets the Date header.

    # *

    # * @return $this

    # *

    # * @final'
- name: getAge
  visibility: public
  parameters: []
  comment: '# * Returns the age of the response in seconds.

    # *

    # * @final'
- name: expire
  visibility: public
  parameters: []
  comment: '# * Marks the response stale by setting the Age header to be equal to
    the maximum age of the response.

    # *

    # * @return $this'
- name: getExpires
  visibility: public
  parameters: []
  comment: '# * Returns the value of the Expires header as a DateTime instance.

    # *

    # * @final'
- name: setExpires
  visibility: public
  parameters:
  - name: date
  comment: '# * Sets the Expires HTTP header with a DateTime instance.

    # *

    # * Passing null as value will remove the header.

    # *

    # * @return $this

    # *

    # * @final'
- name: getMaxAge
  visibility: public
  parameters: []
  comment: '# * Returns the number of seconds after the time specified in the response''s
    Date

    # * header when the response should no longer be considered fresh.

    # *

    # * First, it checks for a s-maxage directive, then a max-age directive, and then
    it falls

    # * back on an expires header. It returns null when no maximum age can be established.

    # *

    # * @final'
- name: setMaxAge
  visibility: public
  parameters:
  - name: value
  comment: '# * Sets the number of seconds after which the response should no longer
    be considered fresh.

    # *

    # * This method sets the Cache-Control max-age directive.

    # *

    # * @return $this

    # *

    # * @final'
- name: setStaleIfError
  visibility: public
  parameters:
  - name: value
  comment: '# * Sets the number of seconds after which the response should no longer
    be returned by shared caches when backend is down.

    # *

    # * This method sets the Cache-Control stale-if-error directive.

    # *

    # * @return $this

    # *

    # * @final'
- name: setStaleWhileRevalidate
  visibility: public
  parameters:
  - name: value
  comment: '# * Sets the number of seconds after which the response should no longer
    return stale content by shared caches.

    # *

    # * This method sets the Cache-Control stale-while-revalidate directive.

    # *

    # * @return $this

    # *

    # * @final'
- name: setSharedMaxAge
  visibility: public
  parameters:
  - name: value
  comment: '# * Sets the number of seconds after which the response should no longer
    be considered fresh by shared caches.

    # *

    # * This method sets the Cache-Control s-maxage directive.

    # *

    # * @return $this

    # *

    # * @final'
- name: getTtl
  visibility: public
  parameters: []
  comment: '# * Returns the response''s time-to-live in seconds.

    # *

    # * It returns null when no freshness information is present in the response.

    # *

    # * When the response''s TTL is 0, the response may not be served from cache without
    first

    # * revalidating with the origin.

    # *

    # * @final'
- name: setTtl
  visibility: public
  parameters:
  - name: seconds
  comment: '# * Sets the response''s time-to-live for shared caches in seconds.

    # *

    # * This method adjusts the Cache-Control/s-maxage directive.

    # *

    # * @return $this

    # *

    # * @final'
- name: setClientTtl
  visibility: public
  parameters:
  - name: seconds
  comment: '# * Sets the response''s time-to-live for private/client caches in seconds.

    # *

    # * This method adjusts the Cache-Control/max-age directive.

    # *

    # * @return $this

    # *

    # * @final'
- name: getLastModified
  visibility: public
  parameters: []
  comment: '# * Returns the Last-Modified HTTP header as a DateTime instance.

    # *

    # * @throws \RuntimeException When the HTTP header is not parseable

    # *

    # * @final'
- name: setLastModified
  visibility: public
  parameters:
  - name: date
  comment: '# * Sets the Last-Modified HTTP header with a DateTime instance.

    # *

    # * Passing null as value will remove the header.

    # *

    # * @return $this

    # *

    # * @final'
- name: getEtag
  visibility: public
  parameters: []
  comment: '# * Returns the literal value of the ETag HTTP header.

    # *

    # * @final'
- name: setEtag
  visibility: public
  parameters:
  - name: etag
  - name: weak
    default: 'false'
  comment: '# * Sets the ETag value.

    # *

    # * @param string|null $etag The ETag unique identifier or null to remove the
    header

    # * @param bool        $weak Whether you want a weak ETag or not

    # *

    # * @return $this

    # *

    # * @final'
- name: setCache
  visibility: public
  parameters:
  - name: options
  comment: '# * Sets the response''s cache headers (validation and/or expiration).

    # *

    # * Available options are: must_revalidate, no_cache, no_store, no_transform,
    public, private, proxy_revalidate, max_age, s_maxage, immutable, last_modified
    and etag.

    # *

    # * @return $this

    # *

    # * @throws \InvalidArgumentException

    # *

    # * @final'
- name: setNotModified
  visibility: public
  parameters: []
  comment: '# * Modifies the response so that it conforms to the rules defined for
    a 304 status code.

    # *

    # * This sets the status, removes the body, and discards any headers

    # * that MUST NOT be included in 304 responses.

    # *

    # * @return $this

    # *

    # * @see https://tools.ietf.org/html/rfc2616#section-10.3.5

    # *

    # * @final'
- name: hasVary
  visibility: public
  parameters: []
  comment: '# * Returns true if the response includes a Vary header.

    # *

    # * @final'
- name: getVary
  visibility: public
  parameters: []
  comment: '# * Returns an array of header names given in the Vary header.

    # *

    # * @final'
- name: setVary
  visibility: public
  parameters:
  - name: headers
  - name: replace
    default: 'true'
  comment: '# * Sets the Vary header.

    # *

    # * @param bool $replace Whether to replace the actual value or not (true by default)

    # *

    # * @return $this

    # *

    # * @final'
- name: isNotModified
  visibility: public
  parameters:
  - name: request
  comment: '# * Determines if the Response validators (ETag, Last-Modified) match

    # * a conditional value specified in the Request.

    # *

    # * If the Response is not modified, it sets the status code to 304 and

    # * removes the actual content by calling the setNotModified() method.

    # *

    # * @final'
- name: isInvalid
  visibility: public
  parameters: []
  comment: '# * Is response invalid?

    # *

    # * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    # *

    # * @final'
- name: isInformational
  visibility: public
  parameters: []
  comment: '# * Is response informative?

    # *

    # * @final'
- name: isSuccessful
  visibility: public
  parameters: []
  comment: '# * Is response successful?

    # *

    # * @final'
- name: isRedirection
  visibility: public
  parameters: []
  comment: '# * Is the response a redirect?

    # *

    # * @final'
- name: isClientError
  visibility: public
  parameters: []
  comment: '# * Is there a client error?

    # *

    # * @final'
- name: isServerError
  visibility: public
  parameters: []
  comment: '# * Was there a server side error?

    # *

    # * @final'
- name: isOk
  visibility: public
  parameters: []
  comment: '# * Is the response OK?

    # *

    # * @final'
- name: isForbidden
  visibility: public
  parameters: []
  comment: '# * Is the response forbidden?

    # *

    # * @final'
- name: isNotFound
  visibility: public
  parameters: []
  comment: '# * Is the response a not found error?

    # *

    # * @final'
- name: isRedirect
  visibility: public
  parameters:
  - name: location
    default: 'null'
  comment: '# * Is the response a redirect of some form?

    # *

    # * @final'
- name: isEmpty
  visibility: public
  parameters: []
  comment: '# * Is the response empty?

    # *

    # * @final'
- name: closeOutputBuffers
  visibility: public
  parameters:
  - name: targetLevel
  - name: flush
  comment: '# * Cleans or flushes output buffers up to target level.

    # *

    # * Resulting level can be greater than target level if a non-removable buffer
    has been encountered.

    # *

    # * @final'
- name: setContentSafe
  visibility: public
  parameters:
  - name: safe
    default: 'true'
  comment: '# * Marks a response as safe according to RFC8674.

    # *

    # * @see https://tools.ietf.org/html/rfc8674'
- name: ensureIEOverSSLCompatibility
  visibility: protected
  parameters:
  - name: request
  comment: '# * Checks if we need to remove Cache-Control for SSL encrypted downloads
    when using IE < 9.

    # *

    # * @see http://support.microsoft.com/kb/323308

    # *

    # * @final'
traits: []
interfaces: []