src/Http/ServerRequest.php
public function withParsedBody($data): ServerRequestInterface
    {
        if (!in_array(gettype($data), ['NULL', 'array', 'object'])) {
            throw new InvalidArgumentException('The specified body parameters has an unsupported argument type.');
        }

        $server_request = clone $this;
        $server_request->stream = $data;

        return $server_request;
    }
public function withParsedBody($data): ServerRequestInterface
    {
        if (!in_array(gettype($data), ['NULL', 'array', 'object'])) {
            throw new InvalidArgumentException('The specified body parameters has an unsupported argument type.');
        }

        $server_request = clone $this;
        $server_request->stream = $data;

        return $server_request;
    }
Return an instance with the specified body parameters.
These MAY be injected during instantiation.
If the request Content-Type is either application/x-www-form-urlencoded
or multipart/form-data, and the request method is POST, use this method
ONLY to inject the contents of $_POST.
The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
deserializing the request body content. Deserialization/parsing returns
structured data, and, as such, this method ONLY accepts arrays or objects,
or a null value if nothing was available to parse.
As an example, if content negotiation determines that the request data
is a JSON payload, this method could be used to create a request
instance with the deserialized parameters.
This method MUST be implemented in such a way as to retain the
immutability of the message, and MUST return an instance that has the
updated body parameters.

@param null|array|object $data The deserialized body data. This will
typically be in an array or object.
@return ServerRequestInterface
@throws \InvalidArgumentException if an unsupported argument type is
provided.