annotate vendor/zendframework/zend-diactoros/src/ServerRequestFactory.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@12 3 * @see https://github.com/zendframework/zend-diactoros for the canonical source repository
Chris@12 4 * @copyright Copyright (c) 2015-2017 Zend Technologies USA Inc. (http://www.zend.com)
Chris@0 5 * @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
Chris@0 6 */
Chris@0 7
Chris@0 8 namespace Zend\Diactoros;
Chris@0 9
Chris@0 10 use InvalidArgumentException;
Chris@0 11 use Psr\Http\Message\UploadedFileInterface;
Chris@0 12 use stdClass;
Chris@0 13 use UnexpectedValueException;
Chris@0 14
Chris@16 15 use function array_change_key_case;
Chris@16 16 use function array_key_exists;
Chris@16 17 use function explode;
Chris@16 18 use function implode;
Chris@16 19 use function is_array;
Chris@16 20 use function is_callable;
Chris@16 21 use function strtolower;
Chris@16 22
Chris@16 23 use const CASE_LOWER;
Chris@16 24
Chris@0 25 /**
Chris@0 26 * Class for marshaling a request object from the current PHP environment.
Chris@0 27 *
Chris@0 28 * Logic largely refactored from the ZF2 Zend\Http\PhpEnvironment\Request class.
Chris@0 29 *
Chris@0 30 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
Chris@0 31 * @license http://framework.zend.com/license/new-bsd New BSD License
Chris@0 32 */
Chris@0 33 abstract class ServerRequestFactory
Chris@0 34 {
Chris@0 35 /**
Chris@0 36 * Function to use to get apache request headers; present only to simplify mocking.
Chris@0 37 *
Chris@0 38 * @var callable
Chris@0 39 */
Chris@0 40 private static $apacheRequestHeaders = 'apache_request_headers';
Chris@0 41
Chris@0 42 /**
Chris@0 43 * Create a request from the supplied superglobal values.
Chris@0 44 *
Chris@0 45 * If any argument is not supplied, the corresponding superglobal value will
Chris@0 46 * be used.
Chris@0 47 *
Chris@0 48 * The ServerRequest created is then passed to the fromServer() method in
Chris@0 49 * order to marshal the request URI and headers.
Chris@0 50 *
Chris@0 51 * @see fromServer()
Chris@0 52 * @param array $server $_SERVER superglobal
Chris@0 53 * @param array $query $_GET superglobal
Chris@0 54 * @param array $body $_POST superglobal
Chris@0 55 * @param array $cookies $_COOKIE superglobal
Chris@0 56 * @param array $files $_FILES superglobal
Chris@0 57 * @return ServerRequest
Chris@0 58 * @throws InvalidArgumentException for invalid file values
Chris@0 59 */
Chris@0 60 public static function fromGlobals(
Chris@0 61 array $server = null,
Chris@0 62 array $query = null,
Chris@0 63 array $body = null,
Chris@0 64 array $cookies = null,
Chris@0 65 array $files = null
Chris@0 66 ) {
Chris@16 67 $server = normalizeServer(
Chris@16 68 $server ?: $_SERVER,
Chris@16 69 is_callable(self::$apacheRequestHeaders) ? self::$apacheRequestHeaders : null
Chris@16 70 );
Chris@16 71 $files = normalizeUploadedFiles($files ?: $_FILES);
Chris@16 72 $headers = marshalHeadersFromSapi($server);
Chris@0 73
Chris@0 74 if (null === $cookies && array_key_exists('cookie', $headers)) {
Chris@16 75 $cookies = parseCookieHeader($headers['cookie']);
Chris@0 76 }
Chris@0 77
Chris@0 78 return new ServerRequest(
Chris@0 79 $server,
Chris@0 80 $files,
Chris@16 81 marshalUriFromSapi($server, $headers),
Chris@16 82 marshalMethodFromSapi($server),
Chris@0 83 'php://input',
Chris@0 84 $headers,
Chris@0 85 $cookies ?: $_COOKIE,
Chris@0 86 $query ?: $_GET,
Chris@0 87 $body ?: $_POST,
Chris@16 88 marshalProtocolVersionFromSapi($server)
Chris@0 89 );
Chris@0 90 }
Chris@0 91
Chris@0 92 /**
Chris@0 93 * Access a value in an array, returning a default value if not found
Chris@0 94 *
Chris@16 95 * @deprecated since 1.8.0; no longer used internally.
Chris@0 96 * @param string $key
Chris@0 97 * @param array $values
Chris@0 98 * @param mixed $default
Chris@0 99 * @return mixed
Chris@0 100 */
Chris@0 101 public static function get($key, array $values, $default = null)
Chris@0 102 {
Chris@0 103 if (array_key_exists($key, $values)) {
Chris@0 104 return $values[$key];
Chris@0 105 }
Chris@0 106
Chris@0 107 return $default;
Chris@0 108 }
Chris@0 109
Chris@0 110 /**
Chris@0 111 * Search for a header value.
Chris@0 112 *
Chris@0 113 * Does a case-insensitive search for a matching header.
Chris@0 114 *
Chris@0 115 * If found, it is returned as a string, using comma concatenation.
Chris@0 116 *
Chris@0 117 * If not, the $default is returned.
Chris@0 118 *
Chris@16 119 * @deprecated since 1.8.0; no longer used internally.
Chris@0 120 * @param string $header
Chris@0 121 * @param array $headers
Chris@0 122 * @param mixed $default
Chris@0 123 * @return string
Chris@0 124 */
Chris@0 125 public static function getHeader($header, array $headers, $default = null)
Chris@0 126 {
Chris@17 127 $header = strtolower($header);
Chris@0 128 $headers = array_change_key_case($headers, CASE_LOWER);
Chris@0 129 if (array_key_exists($header, $headers)) {
Chris@0 130 $value = is_array($headers[$header]) ? implode(', ', $headers[$header]) : $headers[$header];
Chris@0 131 return $value;
Chris@0 132 }
Chris@0 133
Chris@0 134 return $default;
Chris@0 135 }
Chris@0 136
Chris@0 137 /**
Chris@0 138 * Marshal the $_SERVER array
Chris@0 139 *
Chris@0 140 * Pre-processes and returns the $_SERVER superglobal.
Chris@0 141 *
Chris@16 142 * @deprected since 1.8.0; use Zend\Diactoros\normalizeServer() instead.
Chris@0 143 * @param array $server
Chris@0 144 * @return array
Chris@0 145 */
Chris@0 146 public static function normalizeServer(array $server)
Chris@0 147 {
Chris@16 148 return normalizeServer(
Chris@16 149 $server ?: $_SERVER,
Chris@16 150 is_callable(self::$apacheRequestHeaders) ? self::$apacheRequestHeaders : null
Chris@16 151 );
Chris@0 152 }
Chris@0 153
Chris@0 154 /**
Chris@0 155 * Normalize uploaded files
Chris@0 156 *
Chris@0 157 * Transforms each value into an UploadedFileInterface instance, and ensures
Chris@0 158 * that nested arrays are normalized.
Chris@0 159 *
Chris@16 160 * @deprecated since 1.8.0; use \Zend\Diactoros\normalizeUploadedFiles instead.
Chris@0 161 * @param array $files
Chris@0 162 * @return array
Chris@0 163 * @throws InvalidArgumentException for unrecognized values
Chris@0 164 */
Chris@0 165 public static function normalizeFiles(array $files)
Chris@0 166 {
Chris@16 167 return normalizeUploadedFiles($files);
Chris@0 168 }
Chris@0 169
Chris@0 170 /**
Chris@0 171 * Marshal headers from $_SERVER
Chris@0 172 *
Chris@16 173 * @deprecated since 1.8.0; use Zend\Diactoros\marshalHeadersFromSapi().
Chris@0 174 * @param array $server
Chris@0 175 * @return array
Chris@0 176 */
Chris@0 177 public static function marshalHeaders(array $server)
Chris@0 178 {
Chris@16 179 return marshalHeadersFromSapi($server);
Chris@0 180 }
Chris@0 181
Chris@0 182 /**
Chris@0 183 * Marshal the URI from the $_SERVER array and headers
Chris@0 184 *
Chris@16 185 * @deprecated since 1.8.0; use Zend\Diactoros\marshalUriFromSapi() instead.
Chris@0 186 * @param array $server
Chris@0 187 * @param array $headers
Chris@0 188 * @return Uri
Chris@0 189 */
Chris@0 190 public static function marshalUriFromServer(array $server, array $headers)
Chris@0 191 {
Chris@16 192 return marshalUriFromSapi($server, $headers);
Chris@0 193 }
Chris@0 194
Chris@0 195 /**
Chris@0 196 * Marshal the host and port from HTTP headers and/or the PHP environment
Chris@0 197 *
Chris@16 198 * @deprecated since 1.8.0; use Zend\Diactoros\marshalUriFromSapi() instead,
Chris@16 199 * and pull the host and port from the Uri instance that function
Chris@16 200 * returns.
Chris@0 201 * @param stdClass $accumulator
Chris@0 202 * @param array $server
Chris@0 203 * @param array $headers
Chris@0 204 */
Chris@0 205 public static function marshalHostAndPortFromHeaders(stdClass $accumulator, array $server, array $headers)
Chris@0 206 {
Chris@16 207 $uri = marshalUriFromSapi($server, $headers);
Chris@16 208 $accumulator->host = $uri->getHost();
Chris@16 209 $accumulator->port = $uri->getPort();
Chris@0 210 }
Chris@0 211
Chris@0 212 /**
Chris@0 213 * Detect the base URI for the request
Chris@0 214 *
Chris@0 215 * Looks at a variety of criteria in order to attempt to autodetect a base
Chris@0 216 * URI, including rewrite URIs, proxy URIs, etc.
Chris@0 217 *
Chris@16 218 * @deprecated since 1.8.0; use Zend\Diactoros\marshalUriFromSapi() instead,
Chris@16 219 * and pull the path from the Uri instance that function returns.
Chris@0 220 * @param array $server
Chris@0 221 * @return string
Chris@0 222 */
Chris@0 223 public static function marshalRequestUri(array $server)
Chris@0 224 {
Chris@16 225 $uri = marshalUriFromSapi($server, []);
Chris@16 226 return $uri->getPath();
Chris@0 227 }
Chris@0 228
Chris@0 229 /**
Chris@0 230 * Strip the query string from a path
Chris@0 231 *
Chris@16 232 * @deprecated since 1.8.0; no longer used internally.
Chris@0 233 * @param mixed $path
Chris@0 234 * @return string
Chris@0 235 */
Chris@0 236 public static function stripQueryString($path)
Chris@0 237 {
Chris@16 238 return explode('?', $path, 2)[0];
Chris@0 239 }
Chris@0 240 }