Skip to content

Commit a1309bb

Browse files
authored
fix(serializer): skip symfony validation exception (#6220)
fixes #6216
1 parent 2819d56 commit a1309bb

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

src/Serializer/AbstractConstraintViolationListNormalizer.php

+4
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public function __construct(?array $serializePayloadFields = null, private reado
4343
*/
4444
public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool
4545
{
46+
if (!isset($context['rfc_7807_compliant_errors']) && !($context['api_error_resource'] ?? false)) {
47+
return false;
48+
}
49+
4650
return static::FORMAT === $format && $data instanceof ConstraintViolationListInterface;
4751
}
4852

tests/Hydra/Serializer/ConstraintViolationNormalizerTest.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ public function testSupportNormalization(): void
4343

4444
$normalizer = new ConstraintViolationListNormalizer($urlGeneratorProphecy->reveal(), [], $nameConverterProphecy->reveal());
4545

46-
$this->assertTrue($normalizer->supportsNormalization(new ConstraintViolationList(), ConstraintViolationListNormalizer::FORMAT));
47-
$this->assertFalse($normalizer->supportsNormalization(new ConstraintViolationList(), 'xml'));
46+
$this->assertTrue($normalizer->supportsNormalization(new ConstraintViolationList(), ConstraintViolationListNormalizer::FORMAT, ['api_error_resource' => true]));
47+
$this->assertFalse($normalizer->supportsNormalization(new ConstraintViolationList(), 'xml', ['api_error_resource' => true]));
48+
$this->assertFalse($normalizer->supportsNormalization(new \stdClass(), ConstraintViolationListNormalizer::FORMAT, ['api_error_resource' => true]));
4849
$this->assertFalse($normalizer->supportsNormalization(new \stdClass(), ConstraintViolationListNormalizer::FORMAT));
4950
$this->assertEmpty($normalizer->getSupportedTypes('json'));
5051
$this->assertSame([ConstraintViolationListInterface::class => true], $normalizer->getSupportedTypes($normalizer::FORMAT));

tests/Problem/Serializer/ConstraintViolationNormalizerTest.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@ public function testSupportNormalization(): void
4040
$nameConverterProphecy = $this->prophesize(NameConverterInterface::class);
4141
$normalizer = new ConstraintViolationListNormalizer([], $nameConverterProphecy->reveal());
4242

43-
$this->assertTrue($normalizer->supportsNormalization(new ConstraintViolationList(), ConstraintViolationListNormalizer::FORMAT));
44-
$this->assertFalse($normalizer->supportsNormalization(new ConstraintViolationList(), 'xml'));
43+
$this->assertTrue($normalizer->supportsNormalization(new ConstraintViolationList(), ConstraintViolationListNormalizer::FORMAT, ['api_error_resource' => true]));
44+
$this->assertFalse($normalizer->supportsNormalization(new ConstraintViolationList(), 'xml', ['api_error_resource' => true]));
45+
$this->assertFalse($normalizer->supportsNormalization(new \stdClass(), ConstraintViolationListNormalizer::FORMAT, ['api_error_resource' => true]));
4546
$this->assertFalse($normalizer->supportsNormalization(new \stdClass(), ConstraintViolationListNormalizer::FORMAT));
4647
$this->assertEmpty($normalizer->getSupportedTypes('json'));
4748
$this->assertSame([ConstraintViolationListInterface::class => true], $normalizer->getSupportedTypes($normalizer::FORMAT));

0 commit comments

Comments
 (0)