/** * Create a JSON response with the given data. * * Default JSON encoding is performed with the following options, which * produces RFC4627-compliant JSON, capable of embedding into HTML. * * - JSON_HEX_TAG * - JSON_HEX_APOS * - JSON_HEX_AMP * - JSON_HEX_QUOT * - JSON_UNESCAPED_SLASHES * * @param mixed $data Data to convert to JSON. * @param int $status Integer status code for the response; 200 by default. * @param array $headers Array of headers to use at initialization. * @param int $encodingOptions JSON encoding options to use. * @throws InvalidArgumentException if unable to encode the $data to JSON. */ public function __construct($data = '', $status = 200, array $headers = [], $encodingOptions = self::DEFAULT_JSON_FLAGS) { $body = new Stream(fopen('php://temp', 'r+')); $body->write($this->jsonEncode($data, $encodingOptions)); $body->rewind(); parent::__construct($body, $status, []); $headers = $headers + ['Content-Type' => 'application/json']; foreach ($headers as $name => $value) { $this->withHeader($name, $value); } }
/** * Create the message body. * * @param string|StreamInterface $html * @return StreamInterface * @throws InvalidArgumentException if $html is neither a string or stream. */ private function createBody($html) { if ($html instanceof StreamInterface) { return $html; } if (!is_string($html)) { throw new InvalidArgumentException(sprintf('Invalid content (%s) provided to %s', is_object($html) ? get_class($html) : gettype($html), __CLASS__)); } $body = new Stream(fopen('php://temp', 'r+')); $body->write($html); $body->rewind(); return $body; }