%PDF- %PDF-
Direktori : /home/silvzytp/crm-ind-code/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ |
Current File : //home/silvzytp/crm-ind-code/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php |
<?php namespace Illuminate\Http\Resources\Json; use Illuminate\Contracts\Support\Responsable; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; class ResourceResponse implements Responsable { /** * The underlying resource. * * @var mixed */ public $resource; /** * Create a new resource response. * * @param mixed $resource * @return void */ public function __construct($resource) { $this->resource = $resource; } /** * Create an HTTP response that represents the object. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function toResponse($request) { return tap(response()->json( $this->wrap( $this->resource->resolve($request), $this->resource->with($request), $this->resource->additional ), $this->calculateStatus(), [], $this->resource->jsonOptions() ), function ($response) use ($request) { $response->original = $this->resource->resource; $this->resource->withResponse($request, $response); }); } /** * Wrap the given data if necessary. * * @param array $data * @param array $with * @param array $additional * @return array */ protected function wrap($data, $with = [], $additional = []) { if ($data instanceof Collection) { $data = $data->all(); } if ($this->haveDefaultWrapperAndDataIsUnwrapped($data)) { $data = [$this->wrapper() => $data]; } elseif ($this->haveAdditionalInformationAndDataIsUnwrapped($data, $with, $additional)) { $data = [($this->wrapper() ?? 'data') => $data]; } return array_merge_recursive($data, $with, $additional); } /** * Determine if we have a default wrapper and the given data is unwrapped. * * @param array $data * @return bool */ protected function haveDefaultWrapperAndDataIsUnwrapped($data) { return $this->wrapper() && ! array_key_exists($this->wrapper(), $data); } /** * Determine if "with" data has been added and our data is unwrapped. * * @param array $data * @param array $with * @param array $additional * @return bool */ protected function haveAdditionalInformationAndDataIsUnwrapped($data, $with, $additional) { return (! empty($with) || ! empty($additional)) && (! $this->wrapper() || ! array_key_exists($this->wrapper(), $data)); } /** * Get the default data wrapper for the resource. * * @return string */ protected function wrapper() { return get_class($this->resource)::$wrap; } /** * Calculate the appropriate status code for the response. * * @return int */ protected function calculateStatus() { return $this->resource->resource instanceof Model && $this->resource->resource->wasRecentlyCreated ? 201 : 200; } }