Skip to content
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] Replace the MissingConstructorArgumentsException class with MissingConstructorArgumentException #49013

Conversation

HypeMC
Copy link
Contributor

@HypeMC HypeMC commented Jan 17, 2023

Q A
Branch? 6.3
Bug fix? no
New feature? yes
Deprecations? yes
Tickets -
License MIT
Doc PR -

Followup to #42712.

Currently only the missing arguments are saved in the MissingConstructorArgumentsException, so there's no way of knowing which class is missing those arguments when nested objects are being deserialized. This PR adds this information to the exception.

Also, while working on this I've noticed that the $missingArguments argument accepts an array of missing arguments, but only one is ever passed. I'm not sure if this was done intentionally or by accident, but I've changed it so that only one is expected. Please let me know if this change is ok.

UPDATE:
I've added a new MissingConstructorArgumentException class which accepts only one argument and the class name and deprecated the MissingConstructorArgumentsException class. However, since the main goal of this PR is to add the class to the exception, I can revert the renaming part if you think the change is not worth it.

@HypeMC HypeMC force-pushed the class-in-missingconstructorargumentsexception branch 2 times, most recently from 73490be to f03c264 Compare January 21, 2023 13:00
@nicolas-grekas nicolas-grekas changed the title [Serializer] Save missing arguments class in MissingConstructorArgumentsException [Serializer] Replace the MissingConstructorArgumentsException class with MissingConstructorArgumentException Jan 26, 2023
@HypeMC HypeMC force-pushed the class-in-missingconstructorargumentsexception branch 2 times, most recently from 6e090a0 to 93abdbb Compare January 26, 2023 15:01
src/Symfony/Component/Serializer/CHANGELOG.md Outdated Show resolved Hide resolved
UPGRADE-6.3.md Outdated Show resolved Hide resolved
@HypeMC HypeMC force-pushed the class-in-missingconstructorargumentsexception branch from 93abdbb to b377c12 Compare January 26, 2023 15:11
@nicolas-grekas
Copy link
Member

Thank you @HypeMC.

@nicolas-grekas nicolas-grekas merged commit 7ed43d1 into symfony:6.3 Feb 23, 2023
@HypeMC HypeMC deleted the class-in-missingconstructorargumentsexception branch February 23, 2023 18:11
nicolas-grekas added a commit that referenced this pull request Apr 21, 2023
…rning missing argument one by one (ktherage)

This PR was squashed before being merged into the 6.3 branch.

Discussion
----------

[Serializer] Fix MissingConstructorArgumentsException returning missing argument one by one

| Q             | A
| ------------- | ---
| Branch?       | 6.3
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

This PR is an improvment of #49013 and fix #42712.

She aims to fix the problem reported in #49013 indicating that the method `getMissingConstructorArguments()` of `\Symfony\Component\Serializer\Exception\MissingConstructorArgumentsException` class introduced in #42712 is returning only one missing arguments when there's more than one missing.

Commits
-------

43d028d [Serializer] Fix MissingConstructorArgumentsException returning missing argument one by one
@fabpot fabpot mentioned this pull request May 1, 2023
nicolas-grekas added a commit that referenced this pull request Oct 17, 2023
… argument (HypeMC)

This PR was squashed before being merged into the 5.4 branch.

Discussion
----------

[Serializer] Fix collecting only first missing constructor argument

| Q             | A
| ------------- | ---
| Branch?       | 5.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT

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 when `COLLECT_DENORMALIZATION_ERRORS` is `true` or only the first argument is mentioned in the `MissingConstructorArgumentsException` when it is `false`.
On 6.3 however, the part with the `MissingConstructorArgumentsException` was fix with #49832, but the part with the `not_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:
1) backport of #49832
2) alternative to #51866

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.

Commits
-------

0f398ce [Serializer] Fix collecting only first missing constructor argument
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants