Skip to content

Commit

Permalink
merged branch bschussek/drupal-validator (PR symfony#6105)
Browse files Browse the repository at this point in the history
This PR was merged into the master branch.

Commits
-------

24c6530 [Validator] Added instructions on integrating the latest Validator changes to the UPGRADE file

Discussion
----------

[Validator] Added instructions on integrating the latest Validator changes

This is a documentation change only. See the file diff for more information.
  • Loading branch information
fabpot committed Nov 25, 2012
2 parents ee90986 + 24c6530 commit 3299fc6
Show file tree
Hide file tree
Showing 2 changed files with 222 additions and 1 deletion.
222 changes: 222 additions & 0 deletions UPGRADE-2.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -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();
// ...
}
```
1 change: 0 additions & 1 deletion src/Symfony/Component/Validator/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down

0 comments on commit 3299fc6

Please sign in to comment.