34 public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content =
null, array $headers =
null)
36 $this->initialize($query, $request, $attributes, $cookies, $files, $server, $content, $headers);
54 public function initialize(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content =
null, array $headers =
null)
56 $this->request = $request;
57 $this->query = $query;
58 $this->attributes = $attributes;
59 $this->cookies = $cookies;
60 $this->files = $files;
61 $this->server = $server;
63 $this->headers = is_null($headers) ? $this->getHeadersFromServer($this->server) : $headers;
66 public function query($name, $default =
null)
68 return isset($this->query[$name]) ? $this->query[$name] : $default;
71 public function request($name, $default =
null)
73 return isset($this->request[$name]) ? $this->request[$name] : $default;
76 public function server($name, $default =
null)
78 return isset($this->server[$name]) ? $this->server[$name] : $default;
81 public function headers($name, $default =
null)
83 $headers = array_change_key_case($this->headers);
84 $name = strtolower($name);
86 return isset($headers[$name]) ? $headers[$name] : $default;
103 if (
false === $this->
content || (
true === $asResource &&
null !== $this->
content)) {
104 throw new \LogicException(
'getContent() can only be called once when using the resource return type.');
107 if (
true === $asResource) {
110 return fopen(
'php://input',
'rb');
114 $this->
content = file_get_contents(
'php://input');
117 return $this->content;
120 private function getHeadersFromServer($server)
123 foreach ($server
as $key => $value) {
124 if (0 === strpos($key,
'HTTP_')) {
125 $headers[substr($key, 5)] = $value;
128 elseif (in_array($key, array(
'CONTENT_LENGTH',
'CONTENT_MD5',
'CONTENT_TYPE'))) {
129 $headers[$key] = $value;
133 if (isset($server[
'PHP_AUTH_USER'])) {
134 $headers[
'PHP_AUTH_USER'] = $server[
'PHP_AUTH_USER'];
135 $headers[
'PHP_AUTH_PW'] = isset($server[
'PHP_AUTH_PW']) ? $server[
'PHP_AUTH_PW'] :
'';
149 $authorizationHeader =
null;
150 if (isset($server[
'HTTP_AUTHORIZATION'])) {
151 $authorizationHeader = $server[
'HTTP_AUTHORIZATION'];
152 } elseif (isset($server[
'REDIRECT_HTTP_AUTHORIZATION'])) {
153 $authorizationHeader = $server[
'REDIRECT_HTTP_AUTHORIZATION'];
154 } elseif (function_exists(
'apache_request_headers')) {
155 $requestHeaders = (array) apache_request_headers();
158 $requestHeaders = array_combine(array_map(
'ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
160 if (isset($requestHeaders[
'Authorization'])) {
161 $authorizationHeader = trim($requestHeaders[
'Authorization']);
165 if (
null !== $authorizationHeader) {
166 $headers[
'AUTHORIZATION'] = $authorizationHeader;
168 if (0 === stripos($authorizationHeader,
'basic')) {
169 $exploded = explode(
':', base64_decode(substr($authorizationHeader, 6)));
170 if (count($exploded) == 2) {
171 list($headers[
'PHP_AUTH_USER'], $headers[
'PHP_AUTH_PW']) = $exploded;
178 if (isset($headers[
'PHP_AUTH_USER'])) {
179 $headers[
'AUTHORIZATION'] =
'Basic '.base64_encode($headers[
'PHP_AUTH_USER'].
':'.$headers[
'PHP_AUTH_PW']);
194 $class = get_called_class();
195 $request =
new $class(
$_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER);
197 $contentType = $request->server(
'CONTENT_TYPE',
'');
198 $requestMethod = $request->server(
'REQUEST_METHOD',
'GET');
199 if (0 === strpos($contentType,
'application/x-www-form-urlencoded')
200 && in_array(strtoupper($requestMethod), array(
'PUT',
'DELETE'))
202 parse_str($request->getContent(), $data);
203 $request->request = $data;
204 } elseif (0 === strpos($contentType,
'application/json')
205 && in_array(strtoupper($requestMethod), array(
'POST',
'PUT',
'DELETE'))
207 $data = json_decode($request->getContent(),
true);
208 $request->request = $data;