Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9.7k
[Validator] Made it possible (again) to pass a class name to validatePropertyValue()#11498
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
fabpot commentedAug 4, 2014
👍 |
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 also means that some more methods accept object or class with changed phpdoc, likevalidateGenericNode,stepThroughGroupSequence,ExecutionContextInterface::setNode andExecutionContextInterface::getObject
Tobion commentedAug 4, 2014
…alidator::validatePropertyValue()
webmozart commentedAug 4, 2014
Thanks@Tobion. I changed RecursiveContextualValidator::validatePropertyValue() not to pass the class name to the private methods, this way we can leave the other methods unchanged. |
Tobion commentedAug 4, 2014
👍 |
…to validatePropertyValue() (webmozart)This PR was merged into the 2.5 branch.Discussion----------[Validator] Made it possible (again) to pass a class name to validatePropertyValue()| Q | A| ------------- | ---| Bug fix? | yes| New feature? | no| BC breaks? | no| Deprecations? | no| Tests pass? | yes| Fixed tickets |#11139| License | MIT| Doc PR | -In the 2.4 API it was possible to do both:```php$validator->validatePropertyValue($object, 'propertyName', $myValue);$validator->validatePropertyValue('\Vendor\Namespace\ClassName', 'propertyName', $myValue);```In the 2.5 API, the second case was not supported anymore. This is fixed now.Together with the fix comes also a small change (also in the 2.4 API) which I'll demonstrate with a code snippet:```php$metadata->addPropertyConstraint('ClassName', 'propertyName', new Callback( function ($value, $context) { var_dump($context->getRoot()); var_dump($context->getPropertyPath()); }));$validator->validatePropertyValue('ClassName', 'propertyName', 'foobar');```Before this PR, the output would be:```string(9) "ClassName"string(12) "propertyName"```This doesn't make a lot of sense, because usually the following condition holds during validation:```php'' === $context->getPropertyPath() || $value === $propertyAccessor->getValue($context->getRoot(), $context->getPropertyPath())```which obviously cannot work if root is a class name. Thus I changed the root and property path to become:```string(6) "foobar"string(0) ""```With this change, the condition holds also in this case.Commits-------2bf1b37 [Validator] Fixed ExpressionValidator when the validation root is not an objectef6f5f5 [Validator] Fixed: Made it possible (again) to pass a class name to Validator::validatePropertyValue()
Both tests were introduced insymfony#11498, butsymfony#11485 changed the approach to testing the validator and did not include these tests.
In the 2.4 API it was possible to do both:
In the 2.5 API, the second case was not supported anymore. This is fixed now.
Together with the fix comes also a small change (also in the 2.4 API) which I'll demonstrate with a code snippet:
Before this PR, the output would be:
This doesn't make a lot of sense, because usually the following condition holds during validation:
which obviously cannot work if root is a class name. Thus I changed the root and property path to become:
With this change, the condition holds also in this case.