207 lines
4.7 KiB
PHP
207 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Http\Resources\Json;
|
|
|
|
use ArrayAccess;
|
|
use JsonSerializable;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Container\Container;
|
|
use Illuminate\Contracts\Support\Arrayable;
|
|
use Illuminate\Contracts\Routing\UrlRoutable;
|
|
use Illuminate\Contracts\Support\Responsable;
|
|
use Illuminate\Http\Resources\DelegatesToResource;
|
|
use Illuminate\Http\Resources\ConditionallyLoadsAttributes;
|
|
|
|
class Resource 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
|
|
*/
|
|
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 dynamic $parameters
|
|
* @return static
|
|
*/
|
|
public static function make(...$parameters)
|
|
{
|
|
return new static(...$parameters);
|
|
}
|
|
|
|
/**
|
|
* Create new anonymous resource collection.
|
|
*
|
|
* @param mixed $resource
|
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
|
*/
|
|
public static function collection($resource)
|
|
{
|
|
return new AnonymousResourceCollection($resource, get_called_class());
|
|
}
|
|
|
|
/**
|
|
* 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 (is_array($data)) {
|
|
$data = $data;
|
|
} elseif ($data instanceof Arrayable || $data instanceof Collection) {
|
|
$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
|
|
*/
|
|
public function toArray($request)
|
|
{
|
|
return $this->resource->toArray();
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
|
|
/**
|
|
* 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()
|
|
{
|
|
return $this->resolve(Container::getInstance()->make('request'));
|
|
}
|
|
}
|