From 903a94a9e4f08f70e96a1d63105fc3ddf79e0d9a Mon Sep 17 00:00:00 2001 From: BafS Date: Tue, 7 Sep 2021 16:23:44 +0200 Subject: [PATCH] [Serializer] Save missing arguments in MissingConstructorArgumentsException --- src/Symfony/Component/Serializer/CHANGELOG.md | 1 + .../MissingConstructorArgumentsException.php | 19 +++++++++++++++++++ .../Normalizer/AbstractNormalizer.php | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/CHANGELOG.md b/src/Symfony/Component/Serializer/CHANGELOG.md index be9f305af61d0..1890e54a831de 100644 --- a/src/Symfony/Component/Serializer/CHANGELOG.md +++ b/src/Symfony/Component/Serializer/CHANGELOG.md @@ -8,6 +8,7 @@ CHANGELOG * Add support for serializing empty array as object * Return empty collections as `ArrayObject` from `Serializer::normalize()` when `PRESERVE_EMPTY_OBJECTS` is set * Add support for collecting type errors during denormalization + * Add missing arguments in `MissingConstructorArgumentsException` 5.3 --- diff --git a/src/Symfony/Component/Serializer/Exception/MissingConstructorArgumentsException.php b/src/Symfony/Component/Serializer/Exception/MissingConstructorArgumentsException.php index c433cbff64fba..fe984a291f074 100644 --- a/src/Symfony/Component/Serializer/Exception/MissingConstructorArgumentsException.php +++ b/src/Symfony/Component/Serializer/Exception/MissingConstructorArgumentsException.php @@ -16,4 +16,23 @@ */ class MissingConstructorArgumentsException extends RuntimeException { + /** + * @var string[] + */ + private $missingArguments; + + public function __construct(string $message, int $code = 0, \Throwable $previous = null, array $missingArguments = []) + { + $this->missingArguments = $missingArguments; + + parent::__construct($message, $code, $previous); + } + + /** + * @return string[] + */ + public function getMissingConstructorArguments(): array + { + return $this->missingArguments; + } } diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index c6d2f83b64306..7c8055c8274b3 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -401,7 +401,7 @@ protected function instantiateObject(array &$data, string $class, array &$contex $params[] = null; } else { if (!isset($context['not_normalizable_value_exceptions'])) { - throw new MissingConstructorArgumentsException(sprintf('Cannot create an instance of "%s" from serialized data because its constructor requires parameter "%s" to be present.', $class, $constructorParameter->name)); + throw new MissingConstructorArgumentsException(sprintf('Cannot create an instance of "%s" from serialized data because its constructor requires parameter "%s" to be present.', $class, $constructorParameter->name), 0, null, [$constructorParameter->name]); } $exception = NotNormalizableValueException::createForUnexpectedDataType(