$version, 'ext' => $ext, 'profile' => $profile, 'meta' => $meta, ]); } /** * Get the resource's ID. * * @return string|null */ public function toId(Request $request) { return null; } /** * Get the resource's type. * * @return string|null */ public function toType(Request $request) { return null; } /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\Support\Arrayable|\JsonSerializable|array */ #[\Override] public function toAttributes(Request $request) { if (property_exists($this, 'attributes')) { return $this->attributes; } return $this->toArray($request); } /** * Get the resource's relationships. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\Support\Arrayable|array */ public function toRelationships(Request $request) { if (property_exists($this, 'relationships')) { return $this->relationships; } return []; } /** * Get the resource's links. * * @return array */ public function toLinks(Request $request) { return $this->jsonApiLinks; } /** * Get the resource's meta information. * * @return array */ public function toMeta(Request $request) { return $this->jsonApiMeta; } /** * Get any additional data that should be returned with the resource array. * * @param \Illuminate\Http\Request $request * @return array */ #[\Override] public function with($request) { return array_filter([ 'included' => $this->resolveIncludedResourceObjects($request) ->uniqueStrict('_uniqueKey') ->map(fn ($included) => Arr::except($included, ['_uniqueKey'])) ->values() ->all(), ...($implementation = static::$jsonApiInformation) ? ['jsonapi' => $implementation] : [], ]); } /** * Resolve the resource to an array. * * @param \Illuminate\Http\Request|null $request * @return array */ #[\Override] public function resolve($request = null) { return [ 'data' => $this->resolveResourceData($this->resolveJsonApiRequestFrom($request ?? $this->resolveRequestFromContainer())), ]; } /** * Resolve the resource data to an array. * * @param \Illuminate\Http\Request $request * @return array */ #[\Override] public function resolveResourceData(Request $request) { return $this->resolveResourceObject($request); } /** * Customize the outgoing response for the resource. */ #[\Override] public function withResponse(Request $request, JsonResponse $response): void { $response->header('Content-Type', 'application/vnd.api+json'); } /** * Create an HTTP response that represents the object. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ #[\Override] public function toResponse($request) { return parent::toResponse($this->resolveJsonApiRequestFrom($request)); } /** * Resolve the HTTP request instance from container. * * @return \Illuminate\Http\Resources\JsonApi\JsonApiRequest */ #[\Override] protected function resolveRequestFromContainer() { return $this->resolveJsonApiRequestFrom(parent::resolveRequestFromContainer()); } /** * Create a new resource collection instance. * * @param mixed $resource * @return \Illuminate\Http\Resources\JsonApi\AnonymousResourceCollection */ #[\Override] protected static function newCollection($resource) { return new AnonymousResourceCollection($resource, static::class); } /** * Set the string that should wrap the outer-most resource array. * * @param string $value * @return never * * @throws \RuntimeException */ #[\Override] public static function wrap($value) { throw new BadMethodCallException(sprintf('Using %s() method is not allowed.', __METHOD__)); } /** * Disable wrapping of the outer-most resource array. * * @return never */ #[\Override] public static function withoutWrapping() { throw new BadMethodCallException(sprintf('Using %s() method is not allowed.', __METHOD__)); } /** * Flush the resource's global state. * * @return void */ #[\Override] public static function flushState() { parent::flushState(); static::$jsonApiInformation = []; static::$maxRelationshipDepth = 5; } }