Skip to content

Commit ea84908

Browse files
committed
improve resource linkage
1 parent f962e25 commit ea84908

File tree

2 files changed

+41
-62
lines changed

2 files changed

+41
-62
lines changed

src/Serializer.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ protected function serializeModel(ResourceInterface $model)
9696
'attributes' => $model->getResourceAttributes($attributes),
9797
]);
9898

99+
$included = $this->getIncluded();
99100
$relationships = $model->getResourceRelationships();
100101
if (!empty($relationships)) {
101102
foreach ($relationships as $name => $items) {
@@ -111,12 +112,14 @@ protected function serializeModel(ResourceInterface $model)
111112
}
112113

113114
if (!empty($relationship)) {
114-
$data['relationships'][$name]['data'] = $relationship;
115-
if ($model instanceof LinksInterface) {
116-
$links = $model->getRelationshipLinks($name);
117-
if (!empty($links)) {
118-
$data['relationships'][$name]['links'] = Link::serialize($links);
119-
}
115+
if (in_array($name, $included)) {
116+
$data['relationships'][$name]['data'] = $relationship;
117+
}
118+
}
119+
if ($model instanceof LinksInterface) {
120+
$links = $model->getRelationshipLinks($name);
121+
if (!empty($links)) {
122+
$data['relationships'][$name]['links'] = Link::serialize($links);
120123
}
121124
}
122125
}

tests/SerializerTest.php

Lines changed: 32 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -80,93 +80,71 @@ public function testSerializeModelData()
8080
]
8181
]
8282
], $serializer->serialize($model));
83-
84-
ResourceModel::$fields = ['field1'];
85-
ResourceModel::$extraFields = ['field2'];
86-
$this->assertSame([
87-
'data' => [
88-
'id' => '123',
89-
'type' => 'resource-models',
90-
'attributes' => [
91-
'field1' => 'test',
92-
],
93-
'links' => [
94-
'self' => ['href' => 'http://example.com/resource/123']
95-
]
96-
]
97-
], $serializer->serialize($model));
9883
}
9984

10085
public function testExpand()
10186
{
10287
$serializer = new Serializer();
103-
$serializedModel = [
88+
$compoundModel = $includedModel = [
10489
'id' => '123',
10590
'type' => 'resource-models',
10691
'attributes' => [
10792
'field1' => 'test',
10893
'field2' => 2,
10994
],
110-
'relationships' => [
111-
'extraField1' => [
112-
'data' => ['id' => '123', 'type' => 'resource-models'],
113-
'links' => [
114-
'self' => ['href' => 'http://example.com/resource/123/relationships/extraField1'],
115-
'related' => ['href' => 'http://example.com/resource/123/extraField1'],
116-
]
95+
];
96+
$includedModel['relationships'] = [
97+
'extraField1' => [
98+
'links' => [
99+
'self' => ['href' => 'http://example.com/resource/123/relationships/extraField1'],
100+
'related' => ['href' => 'http://example.com/resource/123/extraField1'],
101+
]
102+
]
103+
];
104+
$compoundModel['relationships'] = [
105+
'extraField1' => [
106+
'data' => ['id' => '123', 'type' => 'resource-models'],
107+
'links' => [
108+
'self' => ['href' => 'http://example.com/resource/123/relationships/extraField1'],
109+
'related' => ['href' => 'http://example.com/resource/123/extraField1'],
117110
]
118-
],
119-
'links' => [
120-
'self' => ['href' => 'http://example.com/resource/123']
121111
]
122112
];
113+
$compoundModel['links'] = $includedModel['links'] = [
114+
'self' => ['href' => 'http://example.com/resource/123']
115+
];
123116
$model = new ResourceModel();
124117
ResourceModel::$fields = ['field1', 'field2'];
125118
ResourceModel::$extraFields = ['extraField1'];
126119
$model->extraField1 = new ResourceModel();
127-
$this->assertSame([
128-
'data' => $serializedModel
129-
], $serializer->serialize($model));
130120

131121
\Yii::$app->request->setQueryParams(['include' => 'extraField1']);
132122
$this->assertSame([
133-
'data' => $serializedModel,
123+
'data' => $compoundModel,
134124
'included' => [
135-
[
136-
'id' => '123',
137-
'type' => 'resource-models',
138-
'attributes' => [
139-
'field1' => 'test',
140-
'field2' => 2,
141-
],
142-
'links' => [
143-
'self' => ['href' => 'http://example.com/resource/123']
144-
]
145-
]
125+
$includedModel
146126
]
147127
], $serializer->serialize($model));
148128

149129
\Yii::$app->request->setQueryParams(['include' => 'extraField1,extraField2']);
150130
$this->assertSame([
151-
'data' => $serializedModel,
131+
'data' => $compoundModel,
152132
'included' => [
153-
[
154-
'id' => '123',
155-
'type' => 'resource-models',
156-
'attributes' => [
157-
'field1' => 'test',
158-
'field2' => 2,
159-
],
160-
'links' => [
161-
'self' => ['href' => 'http://example.com/resource/123']
162-
]
163-
]
133+
$includedModel
164134
]
165135
], $serializer->serialize($model));
166136

167137
\Yii::$app->request->setQueryParams(['include' => 'field1,extraField2']);
138+
$compoundModel['relationships'] = [
139+
'extraField1' => [
140+
'links' => [
141+
'self' => ['href' => 'http://example.com/resource/123/relationships/extraField1'],
142+
'related' => ['href' => 'http://example.com/resource/123/extraField1'],
143+
]
144+
]
145+
];
168146
$this->assertSame([
169-
'data' => $serializedModel
147+
'data' => $compoundModel
170148
], $serializer->serialize($model));
171149
}
172150

@@ -179,7 +157,6 @@ public function dataProviderSerializeDataProvider()
179157
'attributes' => ['username' => 'Bob'],
180158
'links' => ['self' => ['href' => 'http://example.com/resource/123']],
181159
'relationships' => ['extraField1' => [
182-
'data' => ['id' => '123', 'type' => 'resource-models'],
183160
'links' => [
184161
'related' => ['href' => 'http://example.com/resource/123/extraField1'],
185162
'self' => ['href' => 'http://example.com/resource/123/relationships/extraField1']
@@ -193,7 +170,6 @@ public function dataProviderSerializeDataProvider()
193170
'attributes' => ['username' => 'Tom'],
194171
'links' => ['self' => ['href' => 'http://example.com/resource/123']],
195172
'relationships' => ['extraField1' => [
196-
'data' => ['id' => '123', 'type' => 'resource-models'],
197173
'links' => [
198174
'related' => ['href' => 'http://example.com/resource/123/extraField1'],
199175
'self' => ['href' => 'http://example.com/resource/123/relationships/extraField1']

0 commit comments

Comments
 (0)