Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion src/Illuminate/Http/Resources/Json/JsonResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ protected static function newCollection($resource)
*/
public function resolve($request = null)
{
$data = $this->toArray(
$data = $this->toAttributes(
$request ?: Container::getInstance()->make('request')
);

Expand All @@ -124,6 +124,17 @@ public function resolve($request = null)
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 toAttributes(Request $request)
{
return $this->toArray($request);
}

/**
* Transform the resource into an array.
*
Expand Down
4 changes: 2 additions & 2 deletions src/Illuminate/Http/Resources/Json/ResourceCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ public function count(): int
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray(Request $request)
public function toAttributes(Request $request)
{
return $this->collection->map->toArray($request)->all();
return $this->collection->map->resolve($request)->all();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public function with($request)
* @return array
*/
#[\Override]
public function toArray(Request $request)
public function toAttributes(Request $request)
{
return $this->collection
->map(fn ($resource) => $resource->resolveResourceData($request))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\JsonApi\Exceptions\ResourceIdentificationException;
use Illuminate\Http\Resources\JsonApi\JsonApiResource;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use JsonSerializable;
Expand Down Expand Up @@ -53,6 +55,10 @@ public function resolveResourceData(Request $request): array
*/
protected function resolveResourceIdentifier(Request $request): string
{
if (! is_null($resourceId = $this->toId($request))) {
return $resourceId;
}

if (! $this->resource instanceof Model) {
throw ResourceIdentificationException::attemptingToDetermineIdFor($this);
}
Expand All @@ -68,6 +74,10 @@ protected function resolveResourceIdentifier(Request $request): string
*/
protected function resolveResourceType(Request $request): string
{
if (! is_null($resourceType = $this->toType($request))) {
return $resourceType;
}

if (! $this->resource instanceof Model) {
throw ResourceIdentificationException::attemptingToDetermineTypeFor($this);
}
Expand All @@ -83,7 +93,7 @@ protected function resolveResourceType(Request $request): string
*/
protected function resolveResourceAttributes(Request $request): array
{
$data = $this->toArray($request);
$data = $this->toAttributes($request);

if ($data instanceof Arrayable) {
$data = $data->toArray();
Expand All @@ -92,6 +102,7 @@ protected function resolveResourceAttributes(Request $request): array
}

$data = (new Collection($data))
->mapWithKeys(fn ($value, $key) => is_int($key) ? [$value => $this->resource->{$value}] : [$key => $value])
->transform(fn ($value) => value($value, $request))
->all();

Expand Down Expand Up @@ -168,12 +179,17 @@ public function resolveIncludedResources(Request $request): array
$relations = new Collection;

foreach ($this->loadedRelationshipsMap as $relation => $uniqueKey) {
$resource = rescue(fn () => $relation->toResource(), new JsonApiResource($relation), false);
$resourceInstance = rescue(fn () => $relation->toResource(), new JsonApiResource($relation), false);

if (! $resourceInstance instanceof JsonApiResource &&
$resourceInstance instanceof JsonResource) {
$resourceInstance = new JsonApiResource($resourceInstance->resource);
}

$relations->push([
'id' => $uniqueKey[1],
'type' => $uniqueKey[0],
'attributes' => $resource->toArray($request),
'attributes' => Arr::get($resourceInstance->resolve($request), 'data.attributes', []),
]);
}

Expand All @@ -189,7 +205,7 @@ public function resolveIncludedResources(Request $request): array
*/
protected function resolveResourceLinks(Request $request): array
{
return $this->links($request);
return $this->toLinks($request);
}

/**
Expand All @@ -199,7 +215,7 @@ protected function resolveResourceLinks(Request $request): array
*/
protected function resolveResourceMetaInformation(Request $request): array
{
return $this->meta($request);
return $this->toMeta($request);
}

/**
Expand Down
16 changes: 8 additions & 8 deletions src/Illuminate/Http/Resources/JsonApi/JsonApiResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,29 +54,29 @@ public static function configure(?string $version = null, array $ext = [], array
/**
* Get the resource's ID.
*
* @return string
* @return string|null
*/
public function id(Request $request)
public function toId(Request $request)
{
return $this->resolveResourceIdentifier($request);
return null;
}

/**
* Get the resource's type.
*
* @return string
* @return string|null
*/
public function type(Request $request)
public function toType(Request $request)
{
return $this->resolveResourceType($request);
return null;
}

/**
* Get the resource's links.
*
* @return array
*/
public function links(Request $request)
public function toLinks(Request $request)
{
return $this->jsonApiLinks;
}
Expand All @@ -86,7 +86,7 @@ public function links(Request $request)
*
* @return array
*/
public function meta(Request $request)
public function toMeta(Request $request)
{
return $this->jsonApiMeta;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public function toArray(Request $request)

class UserApiResource extends JsonApiResource
{
public function toArray(Request $request)
public function toAttributes(Request $request)
{
return [
'name' => $this->name,
Expand All @@ -186,11 +186,11 @@ public function user()

class PostApiResource extends JsonApiResource
{
public function toArray(Request $request)
public function toAttributes(Request $request)
{
return [
'title' => $this->title,
'content' => $this->content,
'title',
'content',
];
}
}
Expand Down