Skip to content

Commit 812158d

Browse files
committed
Merge 3.2
2 parents 6d15e22 + 06f8b55 commit 812158d

17 files changed

+261
-11
lines changed

features/hal/collection_uri_template.feature

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,33 @@ Feature: Exposing a property being a collection of resources
3636
"_links": {
3737
"self": {
3838
"href": "/property_collection_iri_only_relations/1"
39+
},
40+
"children": {
41+
"href": "/property_collection_iri_only_relations/1/children"
3942
}
4043
},
41-
"name": "asb"
44+
"name": "asb1"
45+
},
46+
{
47+
"_links": {
48+
"self": {
49+
"href": "/property_collection_iri_only_relations/2"
50+
},
51+
"children": {
52+
"href": "/property_collection_iri_only_relations/2/children"
53+
}
54+
},
55+
"name": "asb2"
4256
}
4357
],
4458
"iterableIri": [
4559
{
4660
"_links": {
4761
"self": {
4862
"href": "/property_collection_iri_only_relations/9999"
63+
},
64+
"children": {
65+
"href": "/property_collection_iri_only_relations/9999/children"
4966
}
5067
},
5168
"name": "Michel"

features/jsonapi/collection_uri_template.feature

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ Feature: Exposing a property being a collection of resources
3333
{
3434
"type": "PropertyCollectionIriOnlyRelation",
3535
"id": "/property_collection_iri_only_relations/1"
36+
},
37+
{
38+
"type": "PropertyCollectionIriOnlyRelation",
39+
"id": "/property_collection_iri_only_relations/2"
3640
}
3741
]
3842
},

src/Doctrine/EventListener/PurgeHttpCacheListener.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use ApiPlatform\Metadata\ResourceClassResolverInterface;
2525
use ApiPlatform\Metadata\UrlGeneratorInterface;
2626
use ApiPlatform\Metadata\Util\ClassInfoTrait;
27-
use Doctrine\Common\Util\ClassUtils;
2827
use Doctrine\ORM\EntityManagerInterface;
2928
use Doctrine\ORM\Event\OnFlushEventArgs;
3029
use Doctrine\ORM\Event\PreUpdateEventArgs;
@@ -60,7 +59,7 @@ public function preUpdate(PreUpdateEventArgs $eventArgs): void
6059
$changeSet = $eventArgs->getEntityChangeSet();
6160
// @phpstan-ignore-next-line
6261
$objectManager = method_exists($eventArgs, 'getObjectManager') ? $eventArgs->getObjectManager() : $eventArgs->getEntityManager();
63-
$associationMappings = $objectManager->getClassMetadata(ClassUtils::getClass($eventArgs->getObject()))->getAssociationMappings();
62+
$associationMappings = $objectManager->getClassMetadata(\get_class($eventArgs->getObject()))->getAssociationMappings();
6463

6564
foreach ($changeSet as $key => $value) {
6665
if (!isset($associationMappings[$key])) {
@@ -127,7 +126,7 @@ private function gatherResourceAndItemTags(object $entity, bool $purgeItem): voi
127126

128127
private function gatherRelationTags(EntityManagerInterface $em, object $entity): void
129128
{
130-
$associationMappings = $em->getClassMetadata(ClassUtils::getClass($entity))->getAssociationMappings();
129+
$associationMappings = $em->getClassMetadata($entity::class)->getAssociationMappings();
131130
/** @var array|AssociationMapping $associationMapping according to the version of doctrine orm */
132131
foreach ($associationMappings as $property => $associationMapping) {
133132
if ($associationMapping instanceof AssociationMapping && ($associationMapping->targetEntity ?? null) && !$this->resourceClassResolver->isResourceClass($associationMapping->targetEntity)) {

src/GraphQl/State/Provider/ResolverProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private function getResourceClass(?object $item, ?string $resourceClass, string
6969
return $itemClass;
7070
}
7171

72-
if ($resourceClass !== $itemClass) {
72+
if ($resourceClass !== $itemClass && !$item instanceof $resourceClass) {
7373
throw new \UnexpectedValueException(sprintf($errorMessage, (new \ReflectionClass($resourceClass))->getShortName(), (new \ReflectionClass($itemClass))->getShortName()));
7474
}
7575

src/GraphQl/Tests/State/Provider/ResolverProviderTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
use ApiPlatform\GraphQl\Resolver\QueryItemResolverInterface;
1717
use ApiPlatform\GraphQl\State\Provider\ResolverProvider;
18+
use ApiPlatform\GraphQl\Tests\Fixtures\ApiResource\ChildFoo;
19+
use ApiPlatform\GraphQl\Tests\Fixtures\ApiResource\ParentFoo;
20+
use ApiPlatform\Metadata\GraphQl\Query;
1821
use ApiPlatform\Metadata\GraphQl\QueryCollection;
1922
use ApiPlatform\State\ProviderInterface;
2023
use PHPUnit\Framework\TestCase;
@@ -35,4 +38,18 @@ public function testProvide(): void
3538
$provider = new ResolverProvider($decorated, $resolverLocator);
3639
$this->assertEquals($res, $provider->provide($operation, [], $context));
3740
}
41+
42+
public function testProvideInheritedClass(): void
43+
{
44+
$res = new ChildFoo();
45+
$operation = new Query(class: ParentFoo::class, resolver: 'foo');
46+
$context = [];
47+
$decorated = $this->createMock(ProviderInterface::class);
48+
$resolverMock = $this->createMock(QueryItemResolverInterface::class);
49+
$resolverMock->expects($this->once())->method('__invoke')->willReturn($res);
50+
$resolverLocator = $this->createMock(ContainerInterface::class);
51+
$resolverLocator->expects($this->once())->method('get')->with('foo')->willReturn($resolverMock);
52+
$provider = new ResolverProvider($decorated, $resolverLocator);
53+
$this->assertEquals($res, $provider->provide($operation, [], $context));
54+
}
3855
}

src/Hal/Serializer/ItemNormalizer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ private function getComponents(object $object, ?string $format, array $context):
186186

187187
$relation['iri'] = $this->iriConverter->getIriFromResource($object, UrlGeneratorInterface::ABS_PATH, $operation, $childContext);
188188
$relation['operation'] = $operation;
189+
$cacheKey = null;
189190
}
190191

191192
if ($propertyMetadata->isReadableLink()) {
@@ -202,7 +203,7 @@ private function getComponents(object $object, ?string $format, array $context):
202203
}
203204
}
204205

205-
if (false !== $context['cache_key']) {
206+
if ($cacheKey && false !== $context['cache_key']) {
206207
$this->componentsCache[$cacheKey] = $components;
207208
}
208209

src/Metadata/Extractor/XmlResourceExtractor.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,7 @@ private function buildOperations(\SimpleXMLElement $resource, array $root): ?arr
408408
'queryParameterValidate' => $this->phpize($operation, 'queryParameterValidate', 'bool'),
409409
'priority' => $this->phpize($operation, 'priority', 'integer'),
410410
'name' => $this->phpize($operation, 'name', 'string'),
411+
'routeName' => $this->phpize($operation, 'routeName', 'string'),
411412
]);
412413
}
413414

src/Metadata/Extractor/schema/resources.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
<xsd:attribute type="xsd:positiveInteger" name="priority"/>
4949
<xsd:attribute type="xsd:string" name="name"/>
5050
<xsd:attribute type="xsd:string" name="itemUriTemplate"/>
51+
<xsd:attribute type="xsd:string" name="routeName"/>
5152
</xsd:complexType>
5253

5354
<xsd:complexType name="graphQlOperations">

src/Metadata/Tests/Extractor/XmlExtractorTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ public function testValidXML(): void
278278
'links' => null,
279279
'headers' => ['hello' => 'world'],
280280
'parameters' => null,
281+
'routeName' => 'custom_route_name',
281282
],
282283
[
283284
'name' => null,
@@ -389,6 +390,7 @@ public function testValidXML(): void
389390
extraProperties: ['foo' => 'bar']
390391
),
391392
],
393+
'routeName' => null,
392394
],
393395
],
394396
'graphQlOperations' => null,

src/Metadata/Tests/Extractor/xml/valid.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
</exceptionToStatus>
100100

101101
<operations>
102-
<operation class="ApiPlatform\Metadata\GetCollection" name="custom_operation_name"/>
102+
<operation class="ApiPlatform\Metadata\GetCollection" name="custom_operation_name" routeName="custom_route_name"/>
103103
<operation class="ApiPlatform\Metadata\Get" uriTemplate="/users/{userId}/comments/{id}{._format}">
104104
<uriVariables>
105105
<uriVariable parameterName="userId" fromClass="ApiPlatform\Metadata\Tests\Fixtures\ApiResource\User" fromProperty="author"/>

0 commit comments

Comments
 (0)