Skip to content

Commit 1170c38

Browse files
authored
fix: map uriVariables to uriTemplate vars (#5410)
1 parent d3783d6 commit 1170c38

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/Metadata/Resource/Factory/UriTemplateResourceMetadataCollectionFactory.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,10 @@ private function configureUriVariables(ApiResource|HttpOperation $operation): Ap
185185
$entityClass = $options->getEntityClass();
186186
}
187187

188-
$newUriVariables[$variable] = (new Link())->withFromClass($entityClass)->withIdentifiers(['id'])->withParameterName($variable);
188+
$newUriVariables[$variable] = (new Link())
189+
->withFromClass($entityClass)
190+
->withIdentifiers([property_exists($entityClass, $variable) ? $variable : 'id'])
191+
->withParameterName($variable);
189192
}
190193

191194
return $operation->withUriVariables($newUriVariables);

tests/Metadata/Resource/Factory/UriTemplateResourceMetadataCollectionFactoryTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,16 @@ class: AttributeResource::class,
121121
),
122122
]
123123
),
124+
new ApiResource(
125+
shortName: 'AttributeResource',
126+
class: AttributeResource::class,
127+
uriTemplate: '/attribute_resources/by_name/{name}',
128+
),
129+
new ApiResource(
130+
shortName: 'AttributeResource',
131+
class: AttributeResource::class,
132+
uriTemplate: '/attribute_resources/{foo}',
133+
),
124134
]),
125135
);
126136

@@ -198,6 +208,20 @@ class: AttributeResource::class,
198208
name: '_api_/prefix/attribute_resources/{id}{._format}_get'),
199209
]
200210
),
211+
new ApiResource(
212+
shortName: 'AttributeResource',
213+
class: AttributeResource::class,
214+
uriTemplate: '/attribute_resources/by_name/{name}',
215+
uriVariables: ['name' => new Link(fromClass: AttributeResource::class, identifiers: ['name'], parameterName: 'name')],
216+
operations: [],
217+
),
218+
new ApiResource(
219+
shortName: 'AttributeResource',
220+
class: AttributeResource::class,
221+
uriTemplate: '/attribute_resources/{foo}',
222+
uriVariables: ['foo' => new Link(fromClass: AttributeResource::class, identifiers: ['id'], parameterName: 'foo')],
223+
operations: [],
224+
),
201225
]),
202226
$uriTemplateResourceMetadataCollectionFactory->create(AttributeResource::class)
203227
);

0 commit comments

Comments
 (0)