Viewing file: JsonResource.php (5.71 KB) -rwxrwxr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Http\Resources\Json;
use ArrayAccess; use Illuminate\Container\Container; use Illuminate\Contracts\Routing\UrlRoutable; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Responsable; use Illuminate\Database\Eloquent\JsonEncodingException; use Illuminate\Http\Resources\ConditionallyLoadsAttributes; use Illuminate\Http\Resources\DelegatesToResource; use JsonSerializable;
class JsonResource implements ArrayAccess, JsonSerializable, Responsable, UrlRoutable { use ConditionallyLoadsAttributes, DelegatesToResource;
/** * The resource instance. * * @var mixed */ public $resource;
/** * The additional data that should be added to the top-level resource array. * * @var array */ public $with = [];
/** * The additional meta data that should be added to the resource response. * * Added during response construction by the developer. * * @var array */ public $additional = [];
/** * The "data" wrapper that should be applied. * * @var string|null */ public static $wrap = 'data';
/** * Create a new resource instance. * * @param mixed $resource * @return void */ public function __construct($resource) { $this->resource = $resource; }
/** * Create a new resource instance. * * @param mixed ...$parameters * @return static */ public static function make(...$parameters) { return new static(...$parameters); }
/** * Create a new anonymous resource collection. * * @param mixed $resource * @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection */ public static function collection($resource) { return tap(new AnonymousResourceCollection($resource, static::class), function ($collection) { if (property_exists(static::class, 'preserveKeys')) { $collection->preserveKeys = (new static([]))->preserveKeys === true; } }); }
/** * Resolve the resource to an array. * * @param \Illuminate\Http\Request|null $request * @return array */ public function resolve($request = null) { $data = $this->toArray( $request = $request ?: Container::getInstance()->make('request') );
if ($data instanceof Arrayable) { $data = $data->toArray(); } elseif ($data instanceof JsonSerializable) { $data = $data->jsonSerialize(); }
return $this->filter((array) $data); }
/** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable */ public function toArray($request) { if (is_null($this->resource)) { return []; }
return is_array($this->resource) ? $this->resource : $this->resource->toArray(); }
/** * Convert the model instance to JSON. * * @param int $options * @return string * * @throws \Illuminate\Database\Eloquent\JsonEncodingException */ public function toJson($options = 0) { $json = json_encode($this->jsonSerialize(), $options);
if (JSON_ERROR_NONE !== json_last_error()) { throw JsonEncodingException::forResource($this, json_last_error_msg()); }
return $json; }
/** * Get any additional data that should be returned with the resource array. * * @param \Illuminate\Http\Request $request * @return array */ public function with($request) { return $this->with; }
/** * Add additional meta data to the resource response. * * @param array $data * @return $this */ public function additional(array $data) { $this->additional = $data;
return $this; }
/** * Get the JSON serialization options that should be applied to the resource response. * * @return int */ public function jsonOptions() { return 0; }
/** * Customize the response for a request. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Http\JsonResponse $response * @return void */ public function withResponse($request, $response) { // }
/** * Set the string that should wrap the outer-most resource array. * * @param string $value * @return void */ public static function wrap($value) { static::$wrap = $value; }
/** * Disable wrapping of the outer-most resource array. * * @return void */ public static function withoutWrapping() { static::$wrap = null; }
/** * Transform the resource into an HTTP response. * * @param \Illuminate\Http\Request|null $request * @return \Illuminate\Http\JsonResponse */ public function response($request = null) { return $this->toResponse( $request ?: Container::getInstance()->make('request') ); }
/** * Create an HTTP response that represents the object. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function toResponse($request) { return (new ResourceResponse($this))->toResponse($request); }
/** * Prepare the resource for JSON serialization. * * @return array */ public function jsonSerialize(): array { return $this->resolve(Container::getInstance()->make('request')); } }
|