Skip to content

Commit 6f43e7d

Browse files
committed
Merge branch 'feature/nullable-resource' into 'master'
Allow null single resource response See merge request undabot/json-api-symfony!44
2 parents 00be27b + ef208c5 commit 6f43e7d

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

src/Http/Model/Response/ResourceResponse.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
final class ResourceResponse
1313
{
14-
/** @var ResourceInterface */
14+
/** @var null|ResourceInterface */
1515
private $primaryResource;
1616

1717
/** @var null|ResourceCollectionInterface */
@@ -24,7 +24,7 @@ final class ResourceResponse
2424
private $links;
2525

2626
public function __construct(
27-
ResourceInterface $primaryResource,
27+
?ResourceInterface $primaryResource,
2828
?ResourceCollectionInterface $includedResources = null,
2929
?MetaInterface $meta = null,
3030
?LinkCollectionInterface $links = null
@@ -35,7 +35,7 @@ public function __construct(
3535
$this->links = $links;
3636
}
3737

38-
public function getPrimaryResource(): ResourceInterface
38+
public function getPrimaryResource(): ?ResourceInterface
3939
{
4040
return $this->primaryResource;
4141
}

src/Http/Service/Responder/AbstractResponder.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ public function resource(
101101
array $meta = null,
102102
array $links = null
103103
): ResourceResponse {
104-
$resource = $this->encodeData($primaryData);
104+
/**
105+
* resource response can be single resource or null.
106+
*
107+
* @see https://jsonapi.org/format/#fetching-resources-responses-200
108+
*/
109+
$resource = null === $primaryData ? null : $this->encodeData($primaryData);
105110

106111
return new ResourceResponse(
107112
$resource,

tests/Unit/Http/Service/EventSubscriber/ViewResponseSubscriberTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ public function controllerResultProvider(): \Generator
8686
true,
8787
];
8888

89+
yield 'Null ResourceResponse returned by controller' => [
90+
new ResourceResponse(null),
91+
true,
92+
];
93+
8994
yield 'ResourceValidationErrorsResponse returned by controller' => [
9095
new ResourceValidationErrorsResponse(new ErrorCollection([])),
9196
true,

0 commit comments

Comments
 (0)