-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
[Serializer] Fix collecting only first missing constructor argument #51907
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Serializer] Fix collecting only first missing constructor argument #51907
Conversation
Your solution looks great, but I see a conflict with RequestMapper. Do you tested your solution with PayloadMapper in 6.3? |
258ae0f
to
cd90ab7
Compare
@y4roc Hi, you were right, my changes did cause an issue with the |
@@ -412,24 +413,26 @@ protected function instantiateObject(array &$data, string $class, array &$contex | |||
true | |||
); | |||
$context['not_normalizable_value_exceptions'][] = $exception; | |||
|
|||
return $reflectionClass->newInstanceWithoutConstructor(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is now handled in the try...catch
block.
cd90ab7
to
0f398ce
Compare
Thank you @HypeMC. |
This PR was merged into the 5.4 branch. Discussion ---------- [Serializer] Fix denormalize constructor arguments | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | Fix #52499, Fix #52422 | License | MIT Since this PR: #51907, objects with partial constructor parameters were wrongly instantiated. This PR fixes that issue by delegating the properties values assignment, by unsetting normalized data only when the constructor has been called properly. This might correct #50759 as well. Commits ------- 8f7c7ae [Serializer] Fix denormalize constructor arguments
Alternative to #51866, sort of followup to #49832
Currently on 5.4 only the first exception is added to the
not_normalizable_value_exceptions
array whenCOLLECT_DENORMALIZATION_ERRORS
istrue
or only the first argument is mentioned in theMissingConstructorArgumentsException
when it isfalse
.On 6.3 however, the part with the
MissingConstructorArgumentsException
was fix with #49832, but the part with thenot_normalizable_value_exceptions
was overlooked.IMO this is inconsistent behavior as the two cases are actually the same thing with the only difference being that in one case an exception is thrown while in the other the errors are collected.
I'm not sure if #51866 really qualifies as a bug or is actually more a feature, but the reason #49832 was merged onto 6.3 was because of the changes originally done in #49013, which itself was a feature.
If #51866 does qualify as a bug then it would make sense to backport #49832 to 5.4 for consistency, which is what this PR does.
The PR contains two commits:
If #51866 does not qualify as a bug, the first commit can be drooped and the second one can be rebased with 6.4.
PS I think it's easier to review the changes commit by commit.