From 43240abdf54c62de2d634312496f37d40dd76e24 Mon Sep 17 00:00:00 2001 From: Mathieu Lechat Date: Fri, 29 Sep 2023 10:01:17 +0200 Subject: [PATCH] =?UTF-8?q?[Serializer]=20Make=20`ProblemNormalizer`=20giv?= =?UTF-8?q?e=20details=20about=20Messenger=E2=80=99s=20`ValidationFailedEx?= =?UTF-8?q?ception`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Symfony/Component/Serializer/CHANGELOG.md | 1 + .../Normalizer/ProblemNormalizer.php | 3 ++- .../Normalizer/ProblemNormalizerTest.php | 25 +++++++++++++++++++ .../Component/Serializer/composer.json | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/CHANGELOG.md b/src/Symfony/Component/Serializer/CHANGELOG.md index b206bbe10e19c..15aee29e06e56 100644 --- a/src/Symfony/Component/Serializer/CHANGELOG.md +++ b/src/Symfony/Component/Serializer/CHANGELOG.md @@ -9,6 +9,7 @@ CHANGELOG * Deprecate passing an annotation reader to the constructor of `AnnotationLoader` * Allow the `Groups` attribute/annotation on classes * JsonDecode: Add `json_decode_detailed_errors` option + * Make `ProblemNormalizer` give details about Messenger's `ValidationFailedException` 6.3 --- diff --git a/src/Symfony/Component/Serializer/Normalizer/ProblemNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ProblemNormalizer.php index f7a8077ec7e51..1043c9b0c2e05 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ProblemNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ProblemNormalizer.php @@ -13,6 +13,7 @@ use Symfony\Component\ErrorHandler\Exception\FlattenException; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; +use Symfony\Component\Messenger\Exception\ValidationFailedException as MessageValidationFailedException; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Exception\PartialDenormalizationException; use Symfony\Component\Serializer\SerializerAwareInterface; @@ -84,7 +85,7 @@ public function normalize(mixed $object, string $format = null, array $context = ), ]; $data['detail'] = implode("\n", array_map(fn ($e) => $e['propertyPath'].': '.$e['title'], $data['violations'])); - } elseif ($exception instanceof ValidationFailedException + } elseif (($exception instanceof ValidationFailedException || $exception instanceof MessageValidationFailedException) && $this->serializer instanceof NormalizerInterface && $this->serializer->supportsNormalization($exception->getViolations(), $format, $context) ) { diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ProblemNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ProblemNormalizerTest.php index e6f267bc8a83e..e0a90229a3f20 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ProblemNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ProblemNormalizerTest.php @@ -14,6 +14,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\ErrorHandler\Exception\FlattenException; use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\Messenger\Exception\ValidationFailedException as MessageValidationFailedException; use Symfony\Component\Serializer\Exception\NotNormalizableValueException; use Symfony\Component\Serializer\Exception\PartialDenormalizationException; use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer; @@ -102,4 +103,28 @@ public function testNormalizeValidationFailedException() $exception = new HttpException(422, 'Validation Failed', $exception); $this->assertSame($expected, $this->normalizer->normalize(FlattenException::createFromThrowable($exception), null, ['exception' => $exception])); } + + public function testNormalizeMessageValidationFailedException() + { + $this->normalizer->setSerializer(new Serializer([new ConstraintViolationListNormalizer()])); + + $expected = [ + 'type' => 'https://symfony.com/errors/validation', + 'title' => 'Validation Failed', + 'status' => 422, + 'detail' => 'Invalid value', + 'violations' => [ + [ + 'propertyPath' => '', + 'title' => 'Invalid value', + 'template' => '', + 'parameters' => [], + ], + ], + ]; + + $exception = new MessageValidationFailedException(new \stdClass(), new ConstraintViolationList([new ConstraintViolation('Invalid value', '', [], '', null, null)])); + $exception = new HttpException(422, 'Validation Failed', $exception); + $this->assertSame($expected, $this->normalizer->normalize(FlattenException::createFromThrowable($exception), null, ['exception' => $exception])); + } } diff --git a/src/Symfony/Component/Serializer/composer.json b/src/Symfony/Component/Serializer/composer.json index 09a503c3ff467..407fe6a34720a 100644 --- a/src/Symfony/Component/Serializer/composer.json +++ b/src/Symfony/Component/Serializer/composer.json @@ -33,6 +33,7 @@ "symfony/form": "^5.4|^6.0|^7.0", "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", "symfony/mime": "^5.4|^6.0|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", "symfony/property-info": "^5.4.24|^6.2.11|^7.0", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy