8000 [Validator] Added instructions on integrating the latest Validator changes by webmozart · Pull Request #6105 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Validator] Added instructions on integrating the latest Validator changes #6105

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

Merged
merged 1 commit into from
Nov 25, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be ExecutionContextInterface not 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