|
@@ -29,6 +29,8 @@ class Request implements RequestInterface
|
|
protected $requestParameters;
|
|
protected $requestParameters;
|
|
protected $queryParameters;
|
|
protected $queryParameters;
|
|
protected $serverParameters;
|
|
protected $serverParameters;
|
|
|
|
+ protected $filesParameters;
|
|
|
|
+ protected $cookiesParameters;
|
|
protected $languages;
|
|
protected $languages;
|
|
protected $charsets;
|
|
protected $charsets;
|
|
protected $acceptableContentTypes;
|
|
protected $acceptableContentTypes;
|
|
@@ -48,11 +50,13 @@ class Request implements RequestInterface
|
|
* @param array $query The GET parameters
|
|
* @param array $query The GET parameters
|
|
* @param array $request The POST parameters
|
|
* @param array $request The POST parameters
|
|
* @param array $path The parameters parsed from the PATH_INFO (see Router)
|
|
* @param array $path The parameters parsed from the PATH_INFO (see Router)
|
|
|
|
+ * @param array $cookies The COOKIE parameters
|
|
|
|
+ * @param array $files The FILES parameters
|
|
* @param array $server The SERVER parameters
|
|
* @param array $server The SERVER parameters
|
|
*/
|
|
*/
|
|
- public function __construct(array $query = null, array $request = null, array $path = null, array $server = null)
|
|
|
|
|
|
+ public function __construct(array $query = null, array $request = null, array $path = null, array $cookies = null, array $files = null, array $server = null)
|
|
{
|
|
{
|
|
- $this->setParameters($request, $query, $path, $server);
|
|
|
|
|
|
+ $this->setParameters($request, $query, $path, $cookies, $files, $server);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -63,13 +67,17 @@ class Request implements RequestInterface
|
|
* @param array $query The GET parameters
|
|
* @param array $query The GET parameters
|
|
* @param array $request The POST parameters
|
|
* @param array $request The POST parameters
|
|
* @param array $path The parameters parsed from the PATH_INFO
|
|
* @param array $path The parameters parsed from the PATH_INFO
|
|
|
|
+ * @param array $cookies The COOKIE parameters
|
|
|
|
+ * @param array $files The FILES parameters
|
|
* @param array $server The SERVER parameters
|
|
* @param array $server The SERVER parameters
|
|
*/
|
|
*/
|
|
- public function setParameters(array $query = null, array $request = null, array $path = null, array $server = null)
|
|
|
|
|
|
+ public function setParameters(array $query = null, array $request = null, array $path = null, array $cookies = null, array $files = null, array $server = null)
|
|
{
|
|
{
|
|
$this->requestParameters = null !== $request ? $request : $_POST;
|
|
$this->requestParameters = null !== $request ? $request : $_POST;
|
|
$this->queryParameters = null !== $query ? $query : $_GET;
|
|
$this->queryParameters = null !== $query ? $query : $_GET;
|
|
$this->pathParameters = null !== $path ? $path : array();
|
|
$this->pathParameters = null !== $path ? $path : array();
|
|
|
|
+ $this->cookiesParameters = null !== $cookies ? $cookies : $_COOKIE;
|
|
|
|
+ $this->filesParameters = self::convertFileInformation(null !== $files ? $files : $_FILES);
|
|
$this->serverParameters = null !== $server ? $server : $_SERVER;
|
|
$this->serverParameters = null !== $server ? $server : $_SERVER;
|
|
|
|
|
|
$this->languages = null;
|
|
$this->languages = null;
|
|
@@ -90,34 +98,25 @@ class Request implements RequestInterface
|
|
* @param array $query The GET parameters
|
|
* @param array $query The GET parameters
|
|
* @param array $request The POST parameters
|
|
* @param array $request The POST parameters
|
|
* @param array $path The parameters parsed from the PATH_INFO
|
|
* @param array $path The parameters parsed from the PATH_INFO
|
|
|
|
+ * @param array $cookies The COOKIE parameters
|
|
|
|
+ * @param array $files The FILES parameters
|
|
* @param array $server The SERVER parameters
|
|
* @param array $server The SERVER parameters
|
|
*/
|
|
*/
|
|
- public function duplicate(array $query = null, array $request = null, array $path = null, array $server = null)
|
|
|
|
|
|
+ public function duplicate(array $query = null, array $request = null, array $path = null, array $cookies = null, array $files = null, array $server = null)
|
|
{
|
|
{
|
|
$dup = clone $this;
|
|
$dup = clone $this;
|
|
$dup->setParameters(
|
|
$dup->setParameters(
|
|
null !== $query ? $query : $this->queryParameters,
|
|
null !== $query ? $query : $this->queryParameters,
|
|
null !== $request ? $request : $this->requestParameters,
|
|
null !== $request ? $request : $this->requestParameters,
|
|
null !== $path ? $path : $this->pathParameters,
|
|
null !== $path ? $path : $this->pathParameters,
|
|
|
|
+ null !== $cookies ? $cookies : $this->cookiesParameters,
|
|
|
|
+ null !== $files ? $files : $this->filesParameters,
|
|
null !== $server ? $server : $this->serverParameters
|
|
null !== $server ? $server : $this->serverParameters
|
|
);
|
|
);
|
|
|
|
|
|
return $dup;
|
|
return $dup;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * Gets a cookie value.
|
|
|
|
- *
|
|
|
|
- * @param string $name Cookie name
|
|
|
|
- * @param string $defaultValue Default value returned when no cookie with given name is found
|
|
|
|
- *
|
|
|
|
- * @return mixed The cookie value
|
|
|
|
- */
|
|
|
|
- public function getCookie($name, $default = null)
|
|
|
|
- {
|
|
|
|
- return isset($_COOKIE[$name]) ? $_COOKIE[$name] : $default;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// Order of precedence: GET, PATH, POST, COOKIE
|
|
// Order of precedence: GET, PATH, POST, COOKIE
|
|
// Avoid using this method in controllers:
|
|
// Avoid using this method in controllers:
|
|
// * slow
|
|
// * slow
|
|
@@ -128,51 +127,145 @@ class Request implements RequestInterface
|
|
return $this->getQueryParameter($key, $this->getPathParameter($key, $this->getRequestParameter($key, $default)));
|
|
return $this->getQueryParameter($key, $this->getPathParameter($key, $this->getRequestParameter($key, $default)));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns the server parameters ($_SERVER).
|
|
|
|
+ *
|
|
|
|
+ * @return array An array of server parameters
|
|
|
|
+ */
|
|
public function getServerParameters()
|
|
public function getServerParameters()
|
|
{
|
|
{
|
|
return $this->serverParameters;
|
|
return $this->serverParameters;
|
|
}
|
|
}
|
|
|
|
|
|
- public function getServerParameter($name, $default = null)
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns a server parameter ($_SERVER).
|
|
|
|
+ *
|
|
|
|
+ * @param string $key The key
|
|
|
|
+ * @param mixed $default The default value
|
|
|
|
+ */
|
|
|
|
+ public function getServerParameter($key, $default = null)
|
|
{
|
|
{
|
|
- return isset($this->serverParameters[$name]) ? $this->serverParameters[$name] : $default;
|
|
|
|
|
|
+ return isset($this->serverParameters[$key]) ? $this->serverParameters[$key] : $default;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns the path parameters.
|
|
|
|
+ *
|
|
|
|
+ * @return array An array of path parameters
|
|
|
|
+ */
|
|
public function getPathParameters()
|
|
public function getPathParameters()
|
|
{
|
|
{
|
|
return $this->pathParameters;
|
|
return $this->pathParameters;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Sets the path parameters.
|
|
|
|
+ *
|
|
|
|
+ * @param array An array of path parameters
|
|
|
|
+ */
|
|
public function setPathParameters(array $parameters)
|
|
public function setPathParameters(array $parameters)
|
|
{
|
|
{
|
|
$this->pathParameters = $parameters;
|
|
$this->pathParameters = $parameters;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns a path parameter.
|
|
|
|
+ *
|
|
|
|
+ * @param string $key The key
|
|
|
|
+ * @param mixed $default The default value
|
|
|
|
+ */
|
|
public function getPathParameter($key, $default = null)
|
|
public function getPathParameter($key, $default = null)
|
|
{
|
|
{
|
|
return isset($this->pathParameters[$key]) ? $this->pathParameters[$key] : $default;
|
|
return isset($this->pathParameters[$key]) ? $this->pathParameters[$key] : $default;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns the request parameters ($_POST).
|
|
|
|
+ *
|
|
|
|
+ * @return array An array of request parameters
|
|
|
|
+ */
|
|
public function getRequestParameters()
|
|
public function getRequestParameters()
|
|
{
|
|
{
|
|
return $this->requestParameters;
|
|
return $this->requestParameters;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns a request parameter ($_POST).
|
|
|
|
+ *
|
|
|
|
+ * @param string $key The server key
|
|
|
|
+ * @param mixed $default The default value
|
|
|
|
+ */
|
|
public function getRequestParameter($key, $default = null)
|
|
public function getRequestParameter($key, $default = null)
|
|
{
|
|
{
|
|
return isset($this->requestParameters[$key]) ? $this->requestParameters[$key] : $default;
|
|
return isset($this->requestParameters[$key]) ? $this->requestParameters[$key] : $default;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns the query parameters ($_GET).
|
|
|
|
+ *
|
|
|
|
+ * @return array An array of query parameters
|
|
|
|
+ */
|
|
public function getQueryParameters()
|
|
public function getQueryParameters()
|
|
{
|
|
{
|
|
return $this->queryParameters;
|
|
return $this->queryParameters;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns a query parameter ($_GET).
|
|
|
|
+ *
|
|
|
|
+ * @param string $key The server key
|
|
|
|
+ * @param mixed $default The default value
|
|
|
|
+ */
|
|
public function getQueryParameter($key, $default = null)
|
|
public function getQueryParameter($key, $default = null)
|
|
{
|
|
{
|
|
return isset($this->queryParameters[$key]) ? $this->queryParameters[$key] : $default;
|
|
return isset($this->queryParameters[$key]) ? $this->queryParameters[$key] : $default;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Returns a cookie value ($_COOKIE).
|
|
|
|
+ *
|
|
|
|
+ * @param string $key The key
|
|
|
|
+ * @param mixed $default The default value
|
|
|
|
+ *
|
|
|
|
+ * @return mixed The cookie value
|
|
|
|
+ */
|
|
|
|
+ public function getCookie($key, $default = null)
|
|
|
|
+ {
|
|
|
|
+ return isset($this->cookiesParameters[$key]) ? $cookiesParameters[$key] : $default;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Returns the array of cookies ($_COOKIE).
|
|
|
|
+ *
|
|
|
|
+ * @param array An array of cookies
|
|
|
|
+ */
|
|
|
|
+ public function getCookies()
|
|
|
|
+ {
|
|
|
|
+ return $this->cookiesParameters;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Returns a file from the request ($_FILES).
|
|
|
|
+ *
|
|
|
|
+ * @param string $key A key
|
|
|
|
+ *
|
|
|
|
+ * @return array The associated file
|
|
|
|
+ */
|
|
|
|
+ public function getFile($key)
|
|
|
|
+ {
|
|
|
|
+ return isset($this->filesParameters[$key]) ? $this->filesParameters[$key] : array();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Returns the array of files ($_FILES).
|
|
|
|
+ *
|
|
|
|
+ * @return array An associative array of files
|
|
|
|
+ */
|
|
|
|
+ public function getFiles()
|
|
|
|
+ {
|
|
|
|
+ return $this->filesParameters;
|
|
|
|
+ }
|
|
|
|
+
|
|
public function getHttpHeader($name, $default = null)
|
|
public function getHttpHeader($name, $default = null)
|
|
{
|
|
{
|
|
return $this->getServerParameter('HTTP_'.strtoupper(strtr($name, '-', '_')), $default);
|
|
return $this->getServerParameter('HTTP_'.strtoupper(strtr($name, '-', '_')), $default);
|
|
@@ -735,6 +828,26 @@ class Request implements RequestInterface
|
|
return (string) $pathInfo;
|
|
return (string) $pathInfo;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Converts uploaded file array to a format following the $_GET and $POST naming convention.
|
|
|
|
+ *
|
|
|
|
+ * It's safe to pass an already converted array, in which case this method just returns the original array unmodified.
|
|
|
|
+ *
|
|
|
|
+ * @param array $taintedFiles An array representing uploaded file information
|
|
|
|
+ *
|
|
|
|
+ * @return array An array of re-ordered uploaded file information
|
|
|
|
+ */
|
|
|
|
+ protected function convertFileInformation(array $taintedFiles)
|
|
|
|
+ {
|
|
|
|
+ $files = array();
|
|
|
|
+ foreach ($taintedFiles as $key => $data)
|
|
|
|
+ {
|
|
|
|
+ $files[$key] = $this->fixPhpFilesArray($data);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $files;
|
|
|
|
+ }
|
|
|
|
+
|
|
static protected function initializeFormats()
|
|
static protected function initializeFormats()
|
|
{
|
|
{
|
|
static::$formats = array(
|
|
static::$formats = array(
|
|
@@ -747,4 +860,34 @@ class Request implements RequestInterface
|
|
'atom' => 'application/atom+xml',
|
|
'atom' => 'application/atom+xml',
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ static protected function fixPhpFilesArray($data)
|
|
|
|
+ {
|
|
|
|
+ $fileKeys = array('error', 'name', 'size', 'tmp_name', 'type');
|
|
|
|
+ $keys = array_keys($data);
|
|
|
|
+ sort($keys);
|
|
|
|
+
|
|
|
|
+ if ($fileKeys != $keys || !isset($data['name']) || !is_array($data['name']))
|
|
|
|
+ {
|
|
|
|
+ return $data;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $files = $data;
|
|
|
|
+ foreach ($fileKeys as $k)
|
|
|
|
+ {
|
|
|
|
+ unset($files[$k]);
|
|
|
|
+ }
|
|
|
|
+ foreach (array_keys($data['name']) as $key)
|
|
|
|
+ {
|
|
|
|
+ $files[$key] = self::fixPhpFilesArray(array(
|
|
|
|
+ 'error' => $data['error'][$key],
|
|
|
|
+ 'name' => $data['name'][$key],
|
|
|
|
+ 'type' => $data['type'][$key],
|
|
|
|
+ 'tmp_name' => $data['tmp_name'][$key],
|
|
|
|
+ 'size' => $data['size'][$key],
|
|
|
|
+ ));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $files;
|
|
|
|
+ }
|
|
}
|
|
}
|