Update to drupal 8.0.0-rc1. For more information, see https://www.drupal.org/node/2582663
This commit is contained in:
parent
eb34d130a8
commit
f32e58e4b1
8476 changed files with 211648 additions and 170042 deletions
147
vendor/zendframework/zend-diactoros/src/Request/Serializer.php
vendored
Normal file
147
vendor/zendframework/zend-diactoros/src/Request/Serializer.php
vendored
Normal file
|
@ -0,0 +1,147 @@
|
|||
<?php
|
||||
/**
|
||||
* Zend Framework (http://framework.zend.com/)
|
||||
*
|
||||
* @see http://github.com/zendframework/zend-diactoros for the canonical source repository
|
||||
* @copyright Copyright (c) 2015 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Diactoros\Request;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
use Psr\Http\Message\StreamInterface;
|
||||
use UnexpectedValueException;
|
||||
use Zend\Diactoros\AbstractSerializer;
|
||||
use Zend\Diactoros\Request;
|
||||
use Zend\Diactoros\Stream;
|
||||
use Zend\Diactoros\Uri;
|
||||
|
||||
/**
|
||||
* Serialize (cast to string) or deserialize (cast string to Request) messages.
|
||||
*
|
||||
* This class provides functionality for serializing a RequestInterface instance
|
||||
* to a string, as well as the reverse operation of creating a Request instance
|
||||
* from a string/stream representing a message.
|
||||
*/
|
||||
final class Serializer extends AbstractSerializer
|
||||
{
|
||||
/**
|
||||
* Deserialize a request string to a request instance.
|
||||
*
|
||||
* Internally, casts the message to a stream and invokes fromStream().
|
||||
*
|
||||
* @param string $message
|
||||
* @return Request
|
||||
* @throws UnexpectedValueException when errors occur parsing the message.
|
||||
*/
|
||||
public static function fromString($message)
|
||||
{
|
||||
$stream = new Stream('php://temp', 'wb+');
|
||||
$stream->write($message);
|
||||
return self::fromStream($stream);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deserialize a request stream to a request instance.
|
||||
*
|
||||
* @param StreamInterface $stream
|
||||
* @return Request
|
||||
* @throws UnexpectedValueException when errors occur parsing the message.
|
||||
*/
|
||||
public static function fromStream(StreamInterface $stream)
|
||||
{
|
||||
if (! $stream->isReadable() || ! $stream->isSeekable()) {
|
||||
throw new InvalidArgumentException('Message stream must be both readable and seekable');
|
||||
}
|
||||
|
||||
$stream->rewind();
|
||||
|
||||
list($method, $requestTarget, $version) = self::getRequestLine($stream);
|
||||
$uri = self::createUriFromRequestTarget($requestTarget);
|
||||
|
||||
list($headers, $body) = self::splitStream($stream);
|
||||
|
||||
return (new Request($uri, $method, $body, $headers))
|
||||
->withProtocolVersion($version)
|
||||
->withRequestTarget($requestTarget);
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize a request message to a string.
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @return string
|
||||
*/
|
||||
public static function toString(RequestInterface $request)
|
||||
{
|
||||
$headers = self::serializeHeaders($request->getHeaders());
|
||||
$body = (string) $request->getBody();
|
||||
$format = '%s %s HTTP/%s%s%s';
|
||||
|
||||
if (! empty($headers)) {
|
||||
$headers = "\r\n" . $headers;
|
||||
}
|
||||
if (! empty($body)) {
|
||||
$headers .= "\r\n\r\n";
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
$format,
|
||||
$request->getMethod(),
|
||||
$request->getRequestTarget(),
|
||||
$request->getProtocolVersion(),
|
||||
$headers,
|
||||
$body
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the components of the request line.
|
||||
*
|
||||
* Retrieves the first line of the stream and parses it, raising an
|
||||
* exception if it does not follow specifications; if valid, returns a list
|
||||
* with the method, target, and version, in that order.
|
||||
*
|
||||
* @param StreamInterface $stream
|
||||
* @return array
|
||||
*/
|
||||
private static function getRequestLine(StreamInterface $stream)
|
||||
{
|
||||
$requestLine = self::getLine($stream);
|
||||
|
||||
if (! preg_match(
|
||||
'#^(?P<method>[!\#$%&\'*+.^_`|~a-zA-Z0-9-]+) (?P<target>[^\s]+) HTTP/(?P<version>[1-9]\d*\.\d+)$#',
|
||||
$requestLine,
|
||||
$matches
|
||||
)) {
|
||||
throw new UnexpectedValueException('Invalid request line detected');
|
||||
}
|
||||
|
||||
return [$matches['method'], $matches['target'], $matches['version']];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and return a Uri instance based on the provided request target.
|
||||
*
|
||||
* If the request target is of authority or asterisk form, an empty Uri
|
||||
* instance is returned; otherwise, the value is used to create and return
|
||||
* a new Uri instance.
|
||||
*
|
||||
* @param string $requestTarget
|
||||
* @return Uri
|
||||
*/
|
||||
private static function createUriFromRequestTarget($requestTarget)
|
||||
{
|
||||
if (preg_match('#^https?://#', $requestTarget)) {
|
||||
return new Uri($requestTarget);
|
||||
}
|
||||
|
||||
if (preg_match('#^(\*|[^/])#', $requestTarget)) {
|
||||
return new Uri();
|
||||
}
|
||||
|
||||
return new Uri($requestTarget);
|
||||
}
|
||||
}
|
Reference in a new issue