Skip to content

Commit e03b925

Browse files
authored
Merge pull request #1974 from bendavies/serializer-property-metadata-factory-writable-link-fix
Be more intelligent in determining property writable/readable link.
2 parents 5f7eaf3 + d94c1a6 commit e03b925

File tree

4 files changed

+11
-10
lines changed

4 files changed

+11
-10
lines changed

php-cs-fixer.phar

1.64 MB
Binary file not shown.

src/Metadata/Property/Factory/SerializerPropertyMetadataFactory.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function create(string $resourceClass, string $property, array $options =
5454
[$normalizationGroups, $denormalizationGroups] = $this->getEffectiveSerializerGroups($options, $resourceClass);
5555

5656
$propertyMetadata = $this->transformReadWrite($propertyMetadata, $resourceClass, $property, $normalizationGroups, $denormalizationGroups);
57-
$propertyMetadata = $this->transformLinkStatus($propertyMetadata, $normalizationGroups, $denormalizationGroups);
57+
$propertyMetadata = $this->transformLinkStatus($propertyMetadata, $resourceClass, $property, $normalizationGroups, $denormalizationGroups);
5858
} catch (ResourceClassNotFoundException $e) {
5959
// No need to check link status if related class is not a resource
6060
}
@@ -97,7 +97,7 @@ private function transformReadWrite(PropertyMetadata $propertyMetadata, string $
9797
*
9898
* @throws ResourceClassNotFoundException
9999
*/
100-
private function transformLinkStatus(PropertyMetadata $propertyMetadata, array $normalizationGroups = null, array $denormalizationGroups = null): PropertyMetadata
100+
private function transformLinkStatus(PropertyMetadata $propertyMetadata, string $resourceClass, string $propertyName, array $normalizationGroups = null, array $denormalizationGroups = null): PropertyMetadata
101101
{
102102
// No need to check link status if property is not readable and not writable
103103
if (false === $propertyMetadata->isReadable() && false === $propertyMetadata->isWritable()) {
@@ -109,6 +109,7 @@ private function transformLinkStatus(PropertyMetadata $propertyMetadata, array $
109109
return $propertyMetadata;
110110
}
111111

112+
$propertyGroups = $this->getPropertySerializerGroups($resourceClass, $propertyName);
112113
$relatedClass = $type->isCollection() && ($collectionValueType = $type->getCollectionValueType()) ? $collectionValueType->getClassName() : $type->getClassName();
113114

114115
if (null === $relatedClass) {
@@ -119,11 +120,11 @@ private function transformLinkStatus(PropertyMetadata $propertyMetadata, array $
119120
$relatedGroups = $this->getResourceSerializerGroups($relatedClass);
120121

121122
if (null === $propertyMetadata->isReadableLink()) {
122-
$propertyMetadata = $propertyMetadata->withReadableLink(null !== $normalizationGroups && !empty(array_intersect($normalizationGroups, $relatedGroups)));
123+
$propertyMetadata = $propertyMetadata->withReadableLink(null !== $normalizationGroups && !empty(array_intersect($propertyGroups, $relatedGroups)) && !empty(array_intersect($normalizationGroups, $relatedGroups)));
123124
}
124125

125126
if (null === $propertyMetadata->isWritableLink()) {
126-
$propertyMetadata = $propertyMetadata->withWritableLink(null !== $denormalizationGroups && !empty(array_intersect($denormalizationGroups, $relatedGroups)));
127+
$propertyMetadata = $propertyMetadata->withWritableLink(null !== $denormalizationGroups && !empty(array_intersect($propertyGroups, $relatedGroups)) && !empty(array_intersect($denormalizationGroups, $relatedGroups)));
127128
}
128129

129130
return $propertyMetadata;

tests/Fixtures/TestBundle/Document/CustomNormalizedDummy.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CustomNormalizedDummy
3636
* @var int The id
3737
*
3838
* @ODM\Id(strategy="INCREMENT", type="integer")
39-
* @Groups({"input", "output"})
39+
* @Groups({"input", "output", "related_input"})
4040
*/
4141
private $id;
4242

@@ -46,7 +46,7 @@ class CustomNormalizedDummy
4646
* @ODM\Field
4747
* @Assert\NotBlank
4848
* @ApiProperty(iri="http://schema.org/name")
49-
* @Groups({"input", "output"})
49+
* @Groups({"input", "output", "related_input"})
5050
*/
5151
private $name;
5252

@@ -55,7 +55,7 @@ class CustomNormalizedDummy
5555
*
5656
* @ODM\Field(nullable=true)
5757
* @ApiProperty(iri="https://schema.org/alternateName")
58-
* @Groups({"input", "output"})
58+
* @Groups({"input", "output", "related_input"})
5959
*/
6060
private $alias;
6161

tests/Fixtures/TestBundle/Entity/CustomNormalizedDummy.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class CustomNormalizedDummy
3838
* @ORM\Column(type="integer")
3939
* @ORM\Id
4040
* @ORM\GeneratedValue(strategy="AUTO")
41-
* @Groups({"input", "output"})
41+
* @Groups({"input", "output", "related_input"})
4242
*/
4343
private $id;
4444

@@ -48,7 +48,7 @@ class CustomNormalizedDummy
4848
* @ORM\Column
4949
* @Assert\NotBlank
5050
* @ApiProperty(iri="http://schema.org/name")
51-
* @Groups({"input", "output"})
51+
* @Groups({"input", "output", "related_input"})
5252
*/
5353
private $name;
5454

@@ -57,7 +57,7 @@ class CustomNormalizedDummy
5757
*
5858
* @ORM\Column(nullable=true)
5959
* @ApiProperty(iri="https://schema.org/alternateName")
60-
* @Groups({"input", "output"})
60+
* @Groups({"input", "output", "related_input"})
6161
*/
6262
private $alias;
6363

0 commit comments

Comments
 (0)