[Validator] Added instructions on integrating the latest Validator changes to the UPGRADE file
This commit is contained in:
parent
ee90986c9f
commit
24c653045d
222
UPGRADE-2.2.md
222
UPGRADE-2.2.md
@ -35,3 +35,225 @@
|
||||
### Form
|
||||
|
||||
* The PasswordType is now not trimmed by default.
|
||||
|
||||
### Validator
|
||||
|
||||
* Interfaces were created for created for the classes `ConstraintViolation`,
|
||||
`ConstraintViolationList`, `GlobalExecutionContext` and `ExecutionContext`.
|
||||
If you type hinted against any of these classes, you are recommended to
|
||||
type hint against their interfaces now.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
public function validateCustomLogic(ExecutionContext $context)
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
public function validateCustomLogic(ExecutionContextInterface $context)
|
||||
```
|
||||
|
||||
For all implementations of `ConstraintValidatorInterface`, this change is
|
||||
mandatory for the `initialize` method:
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ConstraintValidatorInterface;
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
class MyValidator implements ConstraintValidatorInterface
|
||||
{
|
||||
public function initialize(ExecutionContext $context)
|
||||
{
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ConstraintValidatorInterface;
|
||||
use Symfony\Component\Validator\ExecutionContextInterface;
|
||||
|
||||
class MyValidator implements ConstraintValidatorInterface
|
||||
{
|
||||
public function initialize(ExecutionContextInterface $context)
|
||||
{
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Deprecations
|
||||
|
||||
* The interface `ClassMetadataFactoryInterface` was deprecated and will be
|
||||
removed in Symfony 2.3. You should implement `MetadataFactoryInterface`
|
||||
instead, which changes the name of the method `getClassMetadata` to
|
||||
`getMetadataFor` and accepts arbitrary values (e.g. class names, objects,
|
||||
numbers etc.). In your implementation, you should throw a
|
||||
`NoSuchMetadataException` if you don't support metadata for the given value.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
|
||||
|
||||
class MyMetadataFactory implements ClassMetadataFactoryInterface
|
||||
{
|
||||
public function getClassMetadata($class)
|
||||
{
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\MetadataFactoryInterface;
|
||||
use Symfony\Component\Validator\Exception\NoSuchMetadataException;
|
||||
|
||||
class MyMetadataFactory implements MetadataFactoryInterface
|
||||
{
|
||||
public function getMetadataFor($value)
|
||||
{
|
||||
if (is_object($value)) {
|
||||
$value = get_class($value);
|
||||
}
|
||||
|
||||
if (!is_string($value) || (!class_exists($value) && !interface_exists($value))) {
|
||||
throw new NoSuchMetadataException(...);
|
||||
}
|
||||
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The return value of `ValidatorInterface::getMetadataFactory()` was also
|
||||
changed to return `MetadataFactoryInterface`. Make sure to replace calls to
|
||||
`getClassMetadata` by `getMetadataFor` on the return value of this method.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
$metadataFactory = $validator->getMetadataFactory();
|
||||
$metadata = $metadataFactory->getClassMetadata('Vendor\MyClass');
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
$metadataFactory = $validator->getMetadataFactory();
|
||||
$metadata = $metadataFactory->getMetadataFor('Vendor\MyClass');
|
||||
```
|
||||
|
||||
* The class `GraphWalker` and the accessor `ExecutionContext::getGraphWalker()`
|
||||
were deprecated and will be removed in Symfony 2.3. You should use the
|
||||
methods `ExecutionContextInterface::validate()` and
|
||||
`ExecutionContextInterface::validateValue()` instead.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
public function validateCustomLogic(ExecutionContext $context)
|
||||
{
|
||||
if (/* ... */) {
|
||||
$path = $context->getPropertyPath();
|
||||
$group = $context->getGroup();
|
||||
|
||||
if (!empty($path)) {
|
||||
$path .= '.';
|
||||
}
|
||||
|
||||
$context->getGraphWalker()->walkReference($someObject, $group, $path . 'myProperty', false);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContextInterface;
|
||||
|
||||
public function validateCustomLogic(ExecutionContextInterface $context)
|
||||
{
|
||||
if (/* ... */) {
|
||||
$context->validate($someObject, 'myProperty');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
* The method `ExecutionContext::addViolationAtSubPath()` was deprecated and
|
||||
will be removed in Symfony 2.3. You should use `addViolationAt()` instead.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
public function validateCustomLogic(ExecutionContext $context)
|
||||
{
|
||||
if (/* ... */) {
|
||||
$context->addViolationAtSubPath('myProperty', 'This value is invalid');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContextInterface;
|
||||
|
||||
public function validateCustomLogic(ExecutionContextInterface $context)
|
||||
{
|
||||
if (/* ... */) {
|
||||
$context->addViolationAt('myProperty', 'This value is invalid');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
* The methods `ExecutionContext::getCurrentClass()`, `ExecutionContext::getCurrentProperty()`
|
||||
and `ExecutionContext::getCurrentValue()` were deprecated and will be removed
|
||||
in Symfony 2.3. Use the methods `getClassName()`, `getPropertyName()` and
|
||||
`getValue()` instead.
|
||||
|
||||
Before:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContext;
|
||||
|
||||
public function validateCustomLogic(ExecutionContext $context)
|
||||
{
|
||||
$class = $context->getCurrentClass();
|
||||
$property = $context->getCurrentProperty();
|
||||
$value = $context->getCurrentValue();
|
||||
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
After:
|
||||
|
||||
```
|
||||
use Symfony\Component\Validator\ExecutionContextInterface;
|
||||
|
||||
public function validateCustomLogic(ExecutionContextInterface $context)
|
||||
{
|
||||
$class = $context->getClassName();
|
||||
$property = $context->getPropertyName();
|
||||
$value = $context->getValue();
|
||||
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
@ -22,7 +22,6 @@ CHANGELOG
|
||||
* deprecated `ExecutionContext::getCurrentProperty` in favor of `ExecutionContextInterface::getPropertyName`
|
||||
* deprecated `ExecutionContext::getCurrentValue` in favor of `ExecutionContextInterface::getValue`
|
||||
* deprecated `ExecutionContext::getGraphWalker` in favor of `ExecutionContextInterface::validate` and `ExecutionContextInterface::validateValue`
|
||||
* deprecated `ExecutionContext::getMetadataFactory` in favor of `ExecutionContextInterface::getMetadataFor`
|
||||
* improved `ValidatorInterface::validateValue` to accept arrays of constraints
|
||||
* changed `ValidatorInterface::getMetadataFactory` to return a `MetadataFactoryInterface` instead of a `ClassMetadataFactoryInterface`
|
||||
* removed `ClassMetadataFactoryInterface` type hint from `ValidatorBuilderInterface::setMetadataFactory`.
|
||||
|
Reference in New Issue
Block a user