Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/zendframework/zend-diactoros/src/Request/ArraySerializer.php
<?php
/**
 * @see       http://github.com/zendframework/zend-diactoros for the canonical source repository
 * @copyright Copyright (c) 2017 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
Psr\Http\Message\RequestInterface;
use
UnexpectedValueException;
use
Zend\Diactoros\Request;
use
Zend\Diactoros\Stream;

use function
sprintf;

/**
 * Serialize or deserialize request messages to/from arrays.
 *
 * This class provides functionality for serializing a RequestInterface instance
 * to an array, as well as the reverse operation of creating a Request instance
 * from an array representing a message.
 */
final class ArraySerializer
{
   
/**
     * Serialize a request message to an array.
     *
     * @param RequestInterface $request
     * @return array
     */
   
public static function toArray(RequestInterface $request)
    {
        return [
           
'method'           => $request->getMethod(),
           
'request_target'   => $request->getRequestTarget(),
           
'uri'              => (string) $request->getUri(),
           
'protocol_version' => $request->getProtocolVersion(),
           
'headers'          => $request->getHeaders(),
           
'body'             => (string) $request->getBody(),
        ];
    }

   
/**
     * Deserialize a request array to a request instance.
     *
     * @param array $serializedRequest
     * @return Request
     * @throws UnexpectedValueException when cannot deserialize response
     */
   
public static function fromArray(array $serializedRequest)
    {
        try {
           
$uri             = self::getValueFromKey($serializedRequest, 'uri');
           
$method          = self::getValueFromKey($serializedRequest, 'method');
           
$body            = new Stream('php://memory', 'wb+');
           
$body->write(self::getValueFromKey($serializedRequest, 'body'));
           
$headers         = self::getValueFromKey($serializedRequest, 'headers');
           
$requestTarget   = self::getValueFromKey($serializedRequest, 'request_target');
           
$protocolVersion = self::getValueFromKey($serializedRequest, 'protocol_version');

            return (new
Request($uri, $method, $body, $headers))
                ->
withRequestTarget($requestTarget)
                ->
withProtocolVersion($protocolVersion);
        } catch (\
Exception $exception) {
            throw new
UnexpectedValueException('Cannot deserialize request', null, $exception);
        }
    }

   
/**
     * @param array $data
     * @param string $key
     * @param string $message
     * @return mixed
     * @throws UnexpectedValueException
     */
   
private static function getValueFromKey(array $data, $key, $message = null)
    {
        if (isset(
$data[$key])) {
            return
$data[$key];
        }
        if (
$message === null) {
           
$message = sprintf('Missing "%s" key in serialized request', $key);
        }
        throw new
UnexpectedValueException($message);
    }
}