TYPO3 CMS  TYPO3_6-2
Response.php
Go to the documentation of this file.
1 <?php
3 
22 
28  protected $headers = array();
29 
35  protected $additionalHeaderData = array();
36 
42  protected $statusCode;
43 
49  protected $statusMessage = 'OK';
50 
56  protected $request;
57 
63  protected $statusMessages = array(
64  100 => 'Continue',
65  101 => 'Switching Protocols',
66  102 => 'Processing',
67  // RFC 2518
68  200 => 'OK',
69  201 => 'Created',
70  202 => 'Accepted',
71  203 => 'Non-Authoritative Information',
72  204 => 'No Content',
73  205 => 'Reset Content',
74  206 => 'Partial Content',
75  207 => 'Multi-Status',
76  300 => 'Multiple Choices',
77  301 => 'Moved Permanently',
78  302 => 'Found',
79  303 => 'See Other',
80  304 => 'Not Modified',
81  305 => 'Use Proxy',
82  307 => 'Temporary Redirect',
83  400 => 'Bad Request',
84  401 => 'Unauthorized',
85  402 => 'Payment Required',
86  403 => 'Forbidden',
87  404 => 'Not Found',
88  405 => 'Method Not Allowed',
89  406 => 'Not Acceptable',
90  407 => 'Proxy Authentication Required',
91  408 => 'Request Timeout',
92  409 => 'Conflict',
93  410 => 'Gone',
94  411 => 'Length Required',
95  412 => 'Precondition Failed',
96  413 => 'Request Entity Too Large',
97  414 => 'Request-URI Too Long',
98  415 => 'Unsupported Media Type',
99  416 => 'Requested Range Not Satisfiable',
100  417 => 'Expectation Failed',
101  500 => 'Internal Server Error',
102  501 => 'Not Implemented',
103  502 => 'Bad Gateway',
104  503 => 'Service Unavailable',
105  504 => 'Gateway Timeout',
106  505 => 'HTTP Version Not Supported',
107  507 => 'Insufficient Storage',
108  509 => 'Bandwidth Limit Exceeded'
109  );
110 
116 
126  public function setStatus($code, $message = NULL) {
127  if (!is_int($code)) {
128  throw new \InvalidArgumentException('The HTTP status code must be of type integer, ' . gettype($code) . ' given.', 1220526013);
129  }
130  if ($message === NULL && !isset($this->statusMessages[$code])) {
131  throw new \InvalidArgumentException('No message found for HTTP status code "' . $code . '".', 1220526014);
132  }
133  $this->statusCode = $code;
134  $this->statusMessage = $message === NULL ? $this->statusMessages[$code] : $message;
135  }
136 
143  public function getStatus() {
144  return $this->statusCode . ' ' . $this->statusMessage;
145  }
146 
157  public function setHeader($name, $value, $replaceExistingHeader = TRUE) {
158  if (strtoupper(substr($name, 0, 4)) === 'HTTP') {
159  throw new \InvalidArgumentException('The HTTP status header must be set via setStatus().', 1220541963);
160  }
161  if ($replaceExistingHeader === TRUE || !isset($this->headers[$name])) {
162  $this->headers[$name] = array($value);
163  } else {
164  $this->headers[$name][] = $value;
165  }
166  }
167 
174  public function getHeaders() {
175  $preparedHeaders = array();
176  if ($this->statusCode !== NULL) {
177  $protocolVersion = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
178  $statusHeader = $protocolVersion . ' ' . $this->statusCode . ' ' . $this->statusMessage;
179  $preparedHeaders[] = $statusHeader;
180  }
181  foreach ($this->headers as $name => $values) {
182  foreach ($values as $value) {
183  $preparedHeaders[] = $name . ': ' . $value;
184  }
185  }
186  return $preparedHeaders;
187  }
188 
197  public function sendHeaders() {
198  if (headers_sent() === TRUE) {
199  return;
200  }
201  foreach ($this->getHeaders() as $header) {
202  header($header);
203  }
204  }
205 
212  public function send() {
213  $this->sendHeaders();
214  if ($this->content !== NULL) {
215  echo $this->getContent();
216  }
217  }
218 
231  if (!is_string($additionalHeaderData)) {
232  throw new \InvalidArgumentException('The additiona header data must be of type String, ' . gettype($additionalHeaderData) . ' given.', 1237370877);
233  }
234  if ($this->request->isCached()) {
235  if ($this->environmentService->isEnvironmentInFrontendMode()) {
236  $pageRenderer = $GLOBALS['TSFE']->getPageRenderer();
237  } elseif ($this->environmentService->isEnvironmentInBackendMode()) {
238  $pageRenderer = $GLOBALS['TBE_TEMPLATE']->getPageRenderer();
239  }
240  $pageRenderer->addHeaderData($additionalHeaderData);
241  } else {
242  $this->additionalHeaderData[] = $additionalHeaderData;
243  }
244  }
245 
252  public function getAdditionalHeaderData() {
254  }
255 
259  public function setRequest(\TYPO3\CMS\Extbase\Mvc\Web\Request $request) {
260  $this->request = $request;
261  }
262 
266  public function getRequest() {
267  return $this->request;
268  }
269 
275  public function shutdown() {
276  if (count($this->getAdditionalHeaderData()) > 0) {
277  $GLOBALS['TSFE']->additionalHeaderData[] = implode(chr(10), $this->getAdditionalHeaderData());
278  }
279  $this->sendHeaders();
280  return parent::shutdown();
281  }
282 }
setHeader($name, $value, $replaceExistingHeader=TRUE)
Definition: Response.php:157
setRequest(\TYPO3\CMS\Extbase\Mvc\Web\Request $request)
Definition: Response.php:259
setStatus($code, $message=NULL)
Definition: Response.php:126
addAdditionalHeaderData($additionalHeaderData)
Definition: Response.php:230
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]