-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
[WCM][DoctrineBridge] Fix UniqueEntity interaction with inheritance #16981
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
[WCM][DoctrineBridge] Fix UniqueEntity interaction with inheritance #16981
Conversation
UPGRADE-4.0.md
Outdated
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.
Isn't is possible to iterate over $metadata->getConstraints() in the StaticMethodLoader in order to avoid this ?
foreach ($metadata->getConstraints() as $constraint) {
if ($constraint instanceof TargetAwareConstraintInterface) {
$constraint->target = $metadata->getClassName();
}
}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.
It could be, however the current behavior of StaticMethodLoader is to do the bare minimum and to let the implementation of the loader method do all the heavy lifting work.
That's why I didn't implement the support for TA constraints in there. But, yeah, it could be done, I guess... I will add a note in the other PR.
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.
PS: The use case would still be possible (and the deprecation still required) for custom constraint loaders, just thought about that...
|
Won't it be a BC break as this behavior is the |
a610e22 to
e0ff5d5
Compare
|
Well, the way I see it, it would be a BC break if the previously correct behavior was changed. But since the |
e0ff5d5 to
2d9946c
Compare
|
@lemoinem : I've thought about edges cases with this proposal: What if the |
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.
- @trigger_error('Not providing a target for a UniqueEntity constraint is deprecated since version 3.1 and will be removed in 3.0.', E_USER_DEPRECATED);
+ @trigger_error('Not providing a target for a UniqueEntity constraint is deprecated since version 3.1 and will be removed in 4.0.', E_USER_DEPRECATED);(4.0, not 3.0)
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.
Good Catch. Thank you!
2d9946c to
36f10c9
Compare
|
Indeed, that's a very good point... I didn't consider it because having a However, that would definitely be a BC Break... I'm thinking the best way would be to grab the highest parent of the current entity, among the descendants of the target that IS an Entity and use ITS Repository. By this, I mean, given these classes: calling the validator on an instance of Using the Repository of Trying to compute the exact match (i.e. trying to lookup in the Repositories of |
I don't see what you mean. The file I linked above is from the master branch and so is FOSUser 2. :/ Your new suggestion seems good to me however. |
|
I was referring to FriendsOfSymfony/FOSUserBundle@047b0e6 which deleted the Entity classes. Since this commit, in However, having a Thank you for the feedback! |
|
After testing (https://github.com/lemoinem/symfony-standard/tree/test/doctrine/mapped-superclass-repository, This doesn't change much to the implementation I intended to put in place. |
36f10c9 to
7937237
Compare
7937237 to
54fc801
Compare
35d86d9 to
2bb4810
Compare
|
OK, I finally had time to write a relevant test case for the repository search. PS: I also took the chance to rebase both PRs. The PHP 5.6 Travis build currently fails because of FrameworkBundle errors which aren't related to this PR. |
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.
typo
- findHighestEntityMetada
+ findHighestEntityMetadataThere 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.
Yup, indeed!
Thanks!
Fixes symfony#16969 Fixes symfony#4087 Fixes symfony#12573 Incompatible with symfony#15002 Incompatible with symfony#12977
2bb4810 to
3868657
Compare
StaticMethodLoaderor a custom Constraint Loader is used to loadUniqueEntityconstraintsThis is the second half of #16969 with the actual fix.
This version of the code is ready for code review. However, since I'm dependent on #16978, I'm leaving the PR as a WIP until the dependence is merged and I rebase the current one on master.
Since I introduce deprecations, I updated
UPGRADE-4.0.md.Manage the case where@UniqueEntityis attached to a non-Entity class