diff --git a/src/Attributes/ResponseFromApiResource.php b/src/Attributes/ResponseFromApiResource.php index 65275ac1..be4086e2 100644 --- a/src/Attributes/ResponseFromApiResource.php +++ b/src/Attributes/ResponseFromApiResource.php @@ -3,6 +3,7 @@ namespace Knuckles\Scribe\Attributes; use Attribute; +use Illuminate\Http\Resources\Json\ResourceCollection; use Knuckles\Scribe\Extracting\Shared\ApiResourceResponseTools; #[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD | Attribute::TARGET_CLASS)] @@ -15,7 +16,7 @@ public function __construct( public ?string $description = '', /* Mark if this should be used as a collection. Only needed if not using a ResourceCollection. */ - public bool $collection = false, + public ?bool $collection = null, public array $factoryStates = [], public array $with = [], @@ -34,4 +35,14 @@ public function modelToBeTransformed(): ?string return ApiResourceResponseTools::tryToInferApiResourceModel($this->name); } + + public function isCollection(): bool + { + if (!is_null($this->collection)) { + return $this->collection; + } + + $className = $this->name; + return (new $className(new \Illuminate\Http\Resources\MissingValue)) instanceof ResourceCollection; + } } diff --git a/src/Extracting/Strategies/Responses/UseResponseAttributes.php b/src/Extracting/Strategies/Responses/UseResponseAttributes.php index 6aa37e24..a53efb46 100644 --- a/src/Extracting/Strategies/Responses/UseResponseAttributes.php +++ b/src/Extracting/Strategies/Responses/UseResponseAttributes.php @@ -73,7 +73,7 @@ protected function getApiResourceResponse(ResponseFromApiResource $attributeInst $this->startDbTransaction(); $content = ApiResourceResponseTools::fetch( - $attributeInstance->name, $attributeInstance->collection, $modelInstantiator, + $attributeInstance->name, $attributeInstance->isCollection(), $modelInstantiator, $this->endpointData, $pagination, $attributeInstance->additional, ); $this->endDbTransaction();