JsonResponse.php
TLDR
The JsonResponse.php
file is a part of the Illuminate\Http
namespace. It extends the Symfony\Component\HttpFoundation\JsonResponse
class and adds extra functionality to handle JSON responses in the Laravel framework. The file defines the JsonResponse
class, which provides methods for creating and manipulating JSON responses.
Methods
__construct
This method is the constructor of the JsonResponse
class. It initializes a new JSON response instance. It accepts parameters for the data, status code, headers, JSON options, and a flag to indicate whether the data should be encoded as JSON.
fromJsonString
This method constructs a new JsonResponse
instance from a JSON string. It accepts parameters for the JSON string, status code, and headers. It returns a new JsonResponse
instance.
withCallback
This method sets the JSONP callback for the response. It accepts a callback string as a parameter and returns the current JsonResponse
instance.
getData
This method retrieves the JSON-decoded data from the response. It accepts parameters to control the decoding behavior and returns the decoded data.
setData
This method sets the data for the response. It accepts the data to be set and returns the current JsonResponse
instance. The method also performs JSON encoding on the data based on its type and encoding options.
hasValidJson
This method determines whether an error occurred during JSON encoding. It accepts the JSON error code as a parameter and returns a boolean indicating whether the JSON is valid.
setEncodingOptions
This method sets the JSON encoding options for the response. It accepts the options to be set and returns the current JsonResponse
instance. The method also updates the data by re-encoding it with the new options.
hasEncodingOption
This method checks if a specific JSON encoding option is set. It accepts the option to be checked and returns a boolean indicating whether the option is set.
Classes
None
<?php
namespace Illuminate\Http;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;
use Illuminate\Support\Traits\Macroable;
use InvalidArgumentException;
use JsonSerializable;
use Symfony\Component\HttpFoundation\JsonResponse as BaseJsonResponse;
class JsonResponse extends BaseJsonResponse
{
use ResponseTrait, Macroable {
Macroable::__call as macroCall;
}
/**
* Create a new JSON response instance.
*
* @param mixed $data
* @param int $status
* @param array $headers
* @param int $options
* @param bool $json
* @return void
*/
public function __construct($data = null, $status = 200, $headers = [], $options = 0, $json = false)
{
$this->encodingOptions = $options;
parent::__construct($data, $status, $headers, $json);
}
/**
* {@inheritdoc}
*
* @return static
*/
#[\Override]
public static function fromJsonString(?string $data = null, int $status = 200, array $headers = []): static
{
return new static($data, $status, $headers, 0, true);
}
/**
* Sets the JSONP callback.
*
* @param string|null $callback
* @return $this
*/
public function withCallback($callback = null)
{
return $this->setCallback($callback);
}
/**
* Get the json_decoded data from the response.
*
* @param bool $assoc
* @param int $depth
* @return mixed
*/
public function getData($assoc = false, $depth = 512)
{
return json_decode($this->data, $assoc, $depth);
}
/**
* {@inheritdoc}
*
* @return static
*/
#[\Override]
public function setData($data = []): static
{
$this->original = $data;
// Ensure json_last_error() is cleared...
json_decode('[]');
$this->data = match (true) {
$data instanceof Jsonable => $data->toJson($this->encodingOptions),
$data instanceof JsonSerializable => json_encode($data->jsonSerialize(), $this->encodingOptions),
$data instanceof Arrayable => json_encode($data->toArray(), $this->encodingOptions),
default => json_encode($data, $this->encodingOptions),
};
if (! $this->hasValidJson(json_last_error())) {
throw new InvalidArgumentException(json_last_error_msg());
}
return $this->update();
}
/**
* Determine if an error occurred during JSON encoding.
*
* @param int $jsonError
* @return bool
*/
protected function hasValidJson($jsonError)
{
if ($jsonError === JSON_ERROR_NONE) {
return true;
}
return $this->hasEncodingOption(JSON_PARTIAL_OUTPUT_ON_ERROR) &&
in_array($jsonError, [
JSON_ERROR_RECURSION,
JSON_ERROR_INF_OR_NAN,
JSON_ERROR_UNSUPPORTED_TYPE,
]);
}
/**
* {@inheritdoc}
*
* @return static
*/
#[\Override]
public function setEncodingOptions($options): static
{
$this->encodingOptions = (int) $options;
return $this->setData($this->getData());
}
/**
* Determine if a JSON encoding option is set.
*
* @param int $option
* @return bool
*/
public function hasEncodingOption($option)
{
return (bool) ($this->encodingOptions & $option);
}
}