8000 [Validator] Added instructions on integrating the latest Validator ch… · symfony/symfony@24c6530 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 24c6530

Browse files
committed
[Validator] Added instructions on integrating the latest Validator changes to the UPGRADE file
1 parent ee90986 commit 24c6530

File tree

2 files changed

+222
-1
lines changed

2 files changed

+222
-1
lines changed

UPGRADE-2.2.md

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,225 @@
3535
### Form
3636

3737
* The PasswordType is now not trimmed by default.
38+
39+
### Validator
40+
41+
* Interfaces were created for created for the classes `ConstraintViolation`,
42+
`ConstraintViolationList`, `GlobalExecutionContext` and `ExecutionContext`.
43+
If you type hinted against any of these classes, you are recommended to
44+
type hint against their interfaces now.
45+
46+
Before:
47+
48+
```
49+
use Symfony\Component\Validator\ExecutionContext;
50+
51+
public function validateCustomLogic(ExecutionContext $context)
52+
```
53+
54+
After:
55+
56+
```
57+
use Symfony\Component\Validator\ExecutionContext;
58+
59+
public function validateCustomLogic(ExecutionContextInterface $context)
60+
```
61+
62+
For all implementations of `ConstraintValidatorInterface`, this change is
63+
mandatory for the `initialize` method:
64+
65+
Before:
66+
67+
```
68+
use Symfony\Component\Validator\ConstraintValidatorInterface;
69+
use Symfony\Component\Validator\ExecutionContext;
70+
71+
class MyValidator implements ConstraintValidatorInterface
72+
{
73+
public function initialize(ExecutionContext $context)
74+
{
75+
// ...
76+
}
77+
}
78+
```
79+
80+
After:
81+
82+
```
83+
use Symfony\Component\Validator\ConstraintValidatorInterface;
84+
use Symfony\Component\Validator\ExecutionContextInterface;
85+
86+
class MyValidator implements ConstraintValidatorInterface
87+
{
88+
public function initialize(ExecutionContextInterface $context)
89+
{
90+
// ...
91+
}
92+
}
93+
```
94+
95+
#### Deprecations
96+
97+
* The interface `ClassMetadataFactoryInterface` was deprecated and will be
98+
removed in Symfony 2.3. You should implement `MetadataFactoryInterface`
99+
instead, which changes the name of the method `getClassMetadata` to
100+
`getMetadataFor` and accepts arbitrary values (e.g. class names, objects,
101+
numbers etc.). In your implementation, you should throw a
102+
`NoSuchMetadataException` if you don't support metadata for the given value.
103+
104+
Before:
105+
106+
```
107+
use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
108+
109+
class MyMetadataFactory implements ClassMetadataFactoryInterface
110+
{
111+
public function getClassMetadata($class)
112+
{
113+
// ...
114+
}
115+
}
116+
```
117+
118+
After:
119+
120+
```
121+
use Symfony\Component\Validator\MetadataFactoryInterface;
122+
use Symfony\Component\Validator\Exception\NoSuchMetadataException;
123+
124+
class MyMetadataFactory implements MetadataFactoryInterface
125+
{
126+
public function getMetadataFor($value)
127+
{
128+
if (is_object($value)) {
129+
$value = get_class($value);
130+
}
131+
132+
if (!is_string($value) || (!class_exists($value) && !interface_exists($value))) {
133+
throw new NoSuchMetadataException(...);
134+
}
135+
136+
// ...
137+
}
138+
}
139+
```
140+
141+
The return value of `ValidatorInterface::getMetadataFactory()` was also
142+
changed to return `MetadataFactoryInterface`. Make sure to replace calls to
143+
`getClassMetadata` by `getMetadataFor` on the return value of this method.
144+
145+
Before:
146+
147+
```
148+
$metadataFactory = $validator->getMetadataFactory();
149+
$metadata = $metadataFactory->getClassMetadata('Vendor\MyClass');
150+
```
151+
152+
After:
153+
154+
```
155+
$metadataFactory = $validator->getMetadataFactory();
156+
$metadata = $metadataFactory->getMetadataFor('Vendor\MyClass');
157+
```
158+
159+
* The class `GraphWalker` and the accessor `ExecutionContext::getGraphWalker()`
160+
were deprecated and will be removed in Symfony 2.3. You should use the
161+
methods `ExecutionContextInterface::validate()` and
162+
`ExecutionContextInterface::validateValue()` instead.
163+
164+
Before:
165+
166+
```
167+
use Symfony\Component\Validator\ExecutionContext;
168+
169+
public function validateCustomLogic(ExecutionContext $context)
170+
{
171+
if (/* ... */) {
172+
$path = $context->getPropertyPath();
173+
$group = $context->getGroup();
174+
175+
if (!empty($path)) {
176+
$path .= '.';
177+
}
178+
179+
$context->getGraphWalker()->walkReference($someObject, $group, $path . 'myProperty', false);
180+
}
181+
}
182+
```
183+
184+
After:
185+
186+
```
187+
use Symfony\Component\Validator\ExecutionContextInterface;
188+
189+
public function validateCustomLogic(ExecutionContextInterface $context)
190+
{
191+
if (/* ... */) {
192+
$context->validate($someObject, 'myProperty');
193+
}
194+
}
195+
```
196+
197+
* The method `ExecutionContext::addViolationAtSubPath()` was deprecated and
198+
will be removed in Symfony 2.3. You should use `addViolationAt()` instead.
199+
200+
Before:
201+
202+
```
203+
use Symfony\Component\Validator\ExecutionContext;
204+
205+
public function validateCustomLogic(ExecutionContext $context)
206+
{
207+
if (/* ... */) {
208+
$context->addViolationAtSubPath('myProperty', 'This value is invalid');
209+
}
210+
}
211+
```
212+
213+
After:
214+
215+
```
216+
use Symfony\Component\Validator\ExecutionContextInterface;
217+
218+
public function validateCustomLogic(ExecutionContextInterface $context)
219+
{
220+
if (/* ... */) {
221+
$context->addViolationAt('myProperty', 'This value is invalid');
222+
}
223+
}
224+
```
225+
226+
* The methods `ExecutionContext::getCurrentClass()`, `ExecutionContext::getCurrentProperty()`
227+
and `ExecutionContext::getCurrentValue()` were deprecated and will be removed
228+
in Symfony 2.3. Use the methods `getClassName()`, `getPropertyName()` and
229+
`getValue()` instead.
230+
231+
Before:
232+
233+
```
234+
use Symfony\Component\Validator\ExecutionContext;
235+
236+
public function validateCustomLogic(ExecutionContext $context)
237+
{
238+
$class = $context->getCurrentClass();
239+
$property = $context->getCurrentProperty();
240+
$value = $context->getCurrentValue();
241+
242+
// ...
243+
}
244+
```
245+
246+
After:
247+
248+
```
249+
use Symfony\Component\Validator\ExecutionContextInterface;
250+
251+
public function validateCustomLogic(ExecutionContextInterface $context)
252+
{
253+
$class = $context->getClassName();
254+
$property = $context->getPropertyName();
255+
$value = $context->getValue();
256+
257+
// ...
258+
}
259+
```

src/Symfony/Component/Validator/CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ CHANGELOG
2222
* deprecated `ExecutionContext::getCurrentProperty` in favor of `ExecutionContextInterface::getPropertyName`
2323
* deprecated `ExecutionContext::getCurrentValue` in favor of `ExecutionContextInterface::getValue`
2424
* deprecated `ExecutionContext::getGraphWalker` in favor of `ExecutionContextInterface::validate` and `ExecutionContextInterface::validateValue`
25-
* deprecated `ExecutionContext::getMetadataFactory` in favor of `ExecutionContextInterface::getMetadataFor`
2625
* improved `ValidatorInterface::validateValue` to accept arrays of constraints
2726
* changed `ValidatorInterface::getMetadataFactory` to return a `MetadataFactoryInterface` instead of a `ClassMetadataFactoryInterface`
2827
* removed `ClassMetadataFactoryInterface` type hint from `ValidatorBuilderInterface::setMetadataFactory`.

0 commit comments

Comments
 (0)
0