Skip to content

Commit 606a79a

Browse files
committed
Allow fields to be made only visible for single root resources
1 parent 8ae0682 commit 606a79a

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/Handler/Show.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function handle(Request $request): Response
3535

3636
$serializer = new Serializer($this->api, $request);
3737

38-
$serializer->add($this->resource, $this->model, $include);
38+
$serializer->add($this->resource, $this->model, $include, true);
3939

4040
return new JsonApiResponse(
4141
new CompoundDocument(

src/Schema/Field.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ abstract class Field
1414
private $name;
1515
private $property;
1616
private $visible = true;
17+
private $single = false;
1718
private $writable = false;
1819
private $getter;
1920
private $setter;
@@ -49,6 +50,18 @@ public function hidden(Closure $condition = null)
4950
return $this;
5051
}
5152

53+
/**
54+
* Indicates that the field should only be visible on single root resources
55+
*
56+
* @return $this
57+
*/
58+
public function single()
59+
{
60+
$this->single = true;
61+
62+
return $this;
63+
}
64+
5265
public function writable(Closure $condition = null)
5366
{
5467
$this->writable = $condition ?: true;
@@ -137,6 +150,11 @@ public function getVisible()
137150
return $this->visible;
138151
}
139152

153+
public function getSingle()
154+
{
155+
return $this->single;
156+
}
157+
140158
public function getWritable()
141159
{
142160
return $this->writable;

src/Serializer.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ public function __construct(JsonApi $api, Request $request)
3030
$this->request = $request;
3131
}
3232

33-
public function add(ResourceType $resource, $model, array $include)
33+
public function add(ResourceType $resource, $model, array $include, bool $single = false)
3434
{
35-
$data = $this->addToMap($resource, $model, $include);
35+
$data = $this->addToMap($resource, $model, $include, $single);
3636

3737
$this->primary[] = $data['type'].':'.$data['id'];
3838
}
3939

40-
private function addToMap(ResourceType $resource, $model, array $include)
40+
private function addToMap(ResourceType $resource, $model, array $include, bool $single = false)
4141
{
4242
$adapter = $resource->getAdapter();
4343
$schema = $resource->getSchema();
@@ -69,6 +69,10 @@ private function addToMap(ResourceType $resource, $model, array $include)
6969
continue;
7070
}
7171

72+
if ($field->getSingle() && ! $single) {
73+
continue;
74+
}
75+
7276
if (! evaluate($field->getVisible(), [$model, $this->request])) {
7377
continue;
7478
}

0 commit comments

Comments
 (0)