1b1452582dff454e0177cfd737a3fae7c9a6c7cc
[yaffs-website] / vendor / symfony / validator / Context / ExecutionContextInterface.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Validator\Context;
13
14 use Symfony\Component\Validator\Constraint;
15 use Symfony\Component\Validator\Mapping;
16 use Symfony\Component\Validator\Mapping\MetadataInterface;
17 use Symfony\Component\Validator\Validator\ValidatorInterface;
18 use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface;
19 use Symfony\Component\Validator\ConstraintViolationListInterface;
20
21 /**
22  * The context of a validation run.
23  *
24  * The context collects all violations generated during the validation. By
25  * default, validators execute all validations in a new context:
26  *
27  *     $violations = $validator->validate($object);
28  *
29  * When you make another call to the validator, while the validation is in
30  * progress, the violations will be isolated from each other:
31  *
32  *     public function validate($value, Constraint $constraint)
33  *     {
34  *         $validator = $this->context->getValidator();
35  *
36  *         // The violations are not added to $this->context
37  *         $violations = $validator->validate($value);
38  *     }
39  *
40  * However, if you want to add the violations to the current context, use the
41  * {@link ValidatorInterface::inContext()} method:
42  *
43  *     public function validate($value, Constraint $constraint)
44  *     {
45  *         $validator = $this->context->getValidator();
46  *
47  *         // The violations are added to $this->context
48  *         $validator
49  *             ->inContext($this->context)
50  *             ->validate($value)
51  *         ;
52  *     }
53  *
54  * Additionally, the context provides information about the current state of
55  * the validator, such as the currently validated class, the name of the
56  * currently validated property and more. These values change over time, so you
57  * cannot store a context and expect that the methods still return the same
58  * results later on.
59  *
60  * @author Bernhard Schussek <bschussek@gmail.com>
61  */
62 interface ExecutionContextInterface
63 {
64     /**
65      * Adds a violation at the current node of the validation graph.
66      *
67      * @param string $message The error message
68      * @param array  $params  The parameters substituted in the error message
69      */
70     public function addViolation($message, array $params = array());
71
72     /**
73      * Returns a builder for adding a violation with extended information.
74      *
75      * Call {@link ConstraintViolationBuilderInterface::addViolation()} to
76      * add the violation when you're done with the configuration:
77      *
78      *     $context->buildViolation('Please enter a number between %min% and %max%.')
79      *         ->setParameter('%min%', 3)
80      *         ->setParameter('%max%', 10)
81      *         ->setTranslationDomain('number_validation')
82      *         ->addViolation();
83      *
84      * @param string $message    The error message
85      * @param array  $parameters The parameters substituted in the error message
86      *
87      * @return ConstraintViolationBuilderInterface The violation builder
88      */
89     public function buildViolation($message, array $parameters = array());
90
91     /**
92      * Returns the validator.
93      *
94      * Useful if you want to validate additional constraints:
95      *
96      *     public function validate($value, Constraint $constraint)
97      *     {
98      *         $validator = $this->context->getValidator();
99      *
100      *         $violations = $validator->validateValue($value, new Length(array('min' => 3)));
101      *
102      *         if (count($violations) > 0) {
103      *             // ...
104      *         }
105      *     }
106      *
107      * @return ValidatorInterface
108      */
109     public function getValidator();
110
111     /**
112      * Returns the currently validated object.
113      *
114      * If the validator is currently validating a class constraint, the
115      * object of that class is returned. If it is a validating a property or
116      * getter constraint, the object that the property/getter belongs to is
117      * returned.
118      *
119      * In other cases, null is returned.
120      *
121      * @return object|null The currently validated object or null
122      */
123     public function getObject();
124
125     /**
126      * Sets the currently validated value.
127      *
128      * @param mixed                  $value        The validated value
129      * @param object|null            $object       The currently validated object
130      * @param MetadataInterface|null $metadata     The validation metadata
131      * @param string                 $propertyPath The property path to the current value
132      *
133      * @internal Used by the validator engine. Should not be called by user
134      *           code.
135      */
136     public function setNode($value, $object, MetadataInterface $metadata = null, $propertyPath);
137
138     /**
139      * Sets the currently validated group.
140      *
141      * @param string|null $group The validated group
142      *
143      * @internal Used by the validator engine. Should not be called by user
144      *           code.
145      */
146     public function setGroup($group);
147
148     /**
149      * Sets the currently validated constraint.
150      *
151      * @param Constraint $constraint The validated constraint
152      *
153      * @internal Used by the validator engine. Should not be called by user
154      *           code.
155      */
156     public function setConstraint(Constraint $constraint);
157
158     /**
159      * Marks an object as validated in a specific validation group.
160      *
161      * @param string $cacheKey  The hash of the object
162      * @param string $groupHash The group's name or hash, if it is group
163      *                          sequence
164      *
165      * @internal Used by the validator engine. Should not be called by user
166      *           code.
167      */
168     public function markGroupAsValidated($cacheKey, $groupHash);
169
170     /**
171      * Returns whether an object was validated in a specific validation group.
172      *
173      * @param string $cacheKey  The hash of the object
174      * @param string $groupHash The group's name or hash, if it is group
175      *                          sequence
176      *
177      * @return bool Whether the object was already validated for that
178      *              group
179      *
180      * @internal Used by the validator engine. Should not be called by user
181      *           code.
182      */
183     public function isGroupValidated($cacheKey, $groupHash);
184
185     /**
186      * Marks a constraint as validated for an object.
187      *
188      * @param string $cacheKey       The hash of the object
189      * @param string $constraintHash The hash of the constraint
190      *
191      * @internal Used by the validator engine. Should not be called by user
192      *           code.
193      */
194     public function markConstraintAsValidated($cacheKey, $constraintHash);
195
196     /**
197      * Returns whether a constraint was validated for an object.
198      *
199      * @param string $cacheKey       The hash of the object
200      * @param string $constraintHash The hash of the constraint
201      *
202      * @return bool Whether the constraint was already validated
203      *
204      * @internal Used by the validator engine. Should not be called by user
205      *           code.
206      */
207     public function isConstraintValidated($cacheKey, $constraintHash);
208
209     /**
210      * Marks that an object was initialized.
211      *
212      * @param string $cacheKey The hash of the object
213      *
214      * @internal Used by the validator engine. Should not be called by user
215      *           code.
216      *
217      * @see ObjectInitializerInterface
218      */
219     public function markObjectAsInitialized($cacheKey);
220
221     /**
222      * Returns whether an object was initialized.
223      *
224      * @param string $cacheKey The hash of the object
225      *
226      * @return bool Whether the object was already initialized
227      *
228      * @internal Used by the validator engine. Should not be called by user
229      *           code.
230      *
231      * @see ObjectInitializerInterface
232      */
233     public function isObjectInitialized($cacheKey);
234
235     /**
236      * Returns the violations generated by the validator so far.
237      *
238      * @return ConstraintViolationListInterface The constraint violation list
239      */
240     public function getViolations();
241
242     /**
243      * Returns the value at which validation was started in the object graph.
244      *
245      * The validator, when given an object, traverses the properties and
246      * related objects and their properties. The root of the validation is the
247      * object from which the traversal started.
248      *
249      * The current value is returned by {@link getValue}.
250      *
251      * @return mixed The root value of the validation
252      */
253     public function getRoot();
254
255     /**
256      * Returns the value that the validator is currently validating.
257      *
258      * If you want to retrieve the object that was originally passed to the
259      * validator, use {@link getRoot}.
260      *
261      * @return mixed The currently validated value
262      */
263     public function getValue();
264
265     /**
266      * Returns the metadata for the currently validated value.
267      *
268      * With the core implementation, this method returns a
269      * {@link Mapping\ClassMetadataInterface} instance if the current value is an object,
270      * a {@link Mapping\PropertyMetadata} instance if the current value is
271      * the value of a property and a {@link Mapping\GetterMetadata} instance if
272      * the validated value is the result of a getter method.
273      *
274      * If the validated value is neither of these, for example if the validator
275      * has been called with a plain value and constraint, this method returns
276      * null.
277      *
278      * @return MetadataInterface|null The metadata of the currently validated
279      *                                value.
280      */
281     public function getMetadata();
282
283     /**
284      * Returns the validation group that is currently being validated.
285      *
286      * @return string The current validation group
287      */
288     public function getGroup();
289
290     /**
291      * Returns the class name of the current node.
292      *
293      * If the metadata of the current node does not implement
294      * {@link Mapping\ClassMetadataInterface} or if no metadata is available for the
295      * current node, this method returns null.
296      *
297      * @return string|null The class name or null, if no class name could be found
298      */
299     public function getClassName();
300
301     /**
302      * Returns the property name of the current node.
303      *
304      * If the metadata of the current node does not implement
305      * {@link PropertyMetadataInterface} or if no metadata is available for the
306      * current node, this method returns null.
307      *
308      * @return string|null The property name or null, if no property name could be found
309      */
310     public function getPropertyName();
311
312     /**
313      * Returns the property path to the value that the validator is currently
314      * validating.
315      *
316      * For example, take the following object graph:
317      *
318      * <pre>
319      * (Person)---($address: Address)---($street: string)
320      * </pre>
321      *
322      * When the <tt>Person</tt> instance is passed to the validator, the
323      * property path is initially empty. When the <tt>$address</tt> property
324      * of that person is validated, the property path is "address". When
325      * the <tt>$street</tt> property of the related <tt>Address</tt> instance
326      * is validated, the property path is "address.street".
327      *
328      * Properties of objects are prefixed with a dot in the property path.
329      * Indices of arrays or objects implementing the {@link \ArrayAccess}
330      * interface are enclosed in brackets. For example, if the property in
331      * the previous example is <tt>$addresses</tt> and contains an array
332      * of <tt>Address</tt> instance, the property path generated for the
333      * <tt>$street</tt> property of one of these addresses is for example
334      * "addresses[0].street".
335      *
336      * @param string $subPath Optional. The suffix appended to the current
337      *                        property path.
338      *
339      * @return string The current property path. The result may be an empty
340      *                string if the validator is currently validating the
341      *                root value of the validation graph.
342      */
343     public function getPropertyPath($subPath = '');
344 }