annotate vendor/symfony/validator/Context/ExecutionContext.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Validator\Context;
Chris@0 13
Chris@0 14 use Symfony\Component\Translation\TranslatorInterface;
Chris@0 15 use Symfony\Component\Validator\Constraint;
Chris@0 16 use Symfony\Component\Validator\ConstraintViolation;
Chris@0 17 use Symfony\Component\Validator\ConstraintViolationList;
Chris@0 18 use Symfony\Component\Validator\Mapping\ClassMetadataInterface;
Chris@0 19 use Symfony\Component\Validator\Mapping\MetadataInterface;
Chris@0 20 use Symfony\Component\Validator\Mapping\MemberMetadata;
Chris@0 21 use Symfony\Component\Validator\Mapping\PropertyMetadataInterface;
Chris@0 22 use Symfony\Component\Validator\Util\PropertyPath;
Chris@0 23 use Symfony\Component\Validator\Validator\ValidatorInterface;
Chris@0 24 use Symfony\Component\Validator\Violation\ConstraintViolationBuilder;
Chris@0 25
Chris@0 26 /**
Chris@0 27 * The context used and created by {@link ExecutionContextFactory}.
Chris@0 28 *
Chris@0 29 * @author Bernhard Schussek <bschussek@gmail.com>
Chris@0 30 *
Chris@0 31 * @see ExecutionContextInterface
Chris@0 32 *
Chris@0 33 * @internal You should not instantiate or use this class. Code against
Chris@0 34 * {@link ExecutionContextInterface} instead.
Chris@0 35 */
Chris@0 36 class ExecutionContext implements ExecutionContextInterface
Chris@0 37 {
Chris@0 38 /**
Chris@0 39 * @var ValidatorInterface
Chris@0 40 */
Chris@0 41 private $validator;
Chris@0 42
Chris@0 43 /**
Chris@0 44 * The root value of the validated object graph.
Chris@0 45 *
Chris@0 46 * @var mixed
Chris@0 47 */
Chris@0 48 private $root;
Chris@0 49
Chris@0 50 /**
Chris@0 51 * @var TranslatorInterface
Chris@0 52 */
Chris@0 53 private $translator;
Chris@0 54
Chris@0 55 /**
Chris@0 56 * @var string
Chris@0 57 */
Chris@0 58 private $translationDomain;
Chris@0 59
Chris@0 60 /**
Chris@0 61 * The violations generated in the current context.
Chris@0 62 *
Chris@0 63 * @var ConstraintViolationList
Chris@0 64 */
Chris@0 65 private $violations;
Chris@0 66
Chris@0 67 /**
Chris@0 68 * The currently validated value.
Chris@0 69 *
Chris@0 70 * @var mixed
Chris@0 71 */
Chris@0 72 private $value;
Chris@0 73
Chris@0 74 /**
Chris@0 75 * The currently validated object.
Chris@0 76 *
Chris@0 77 * @var object|null
Chris@0 78 */
Chris@0 79 private $object;
Chris@0 80
Chris@0 81 /**
Chris@0 82 * The property path leading to the current value.
Chris@0 83 *
Chris@0 84 * @var string
Chris@0 85 */
Chris@0 86 private $propertyPath = '';
Chris@0 87
Chris@0 88 /**
Chris@0 89 * The current validation metadata.
Chris@0 90 *
Chris@0 91 * @var MetadataInterface|null
Chris@0 92 */
Chris@0 93 private $metadata;
Chris@0 94
Chris@0 95 /**
Chris@0 96 * The currently validated group.
Chris@0 97 *
Chris@0 98 * @var string|null
Chris@0 99 */
Chris@0 100 private $group;
Chris@0 101
Chris@0 102 /**
Chris@0 103 * The currently validated constraint.
Chris@0 104 *
Chris@0 105 * @var Constraint|null
Chris@0 106 */
Chris@0 107 private $constraint;
Chris@0 108
Chris@0 109 /**
Chris@0 110 * Stores which objects have been validated in which group.
Chris@0 111 *
Chris@0 112 * @var array
Chris@0 113 */
Chris@0 114 private $validatedObjects = array();
Chris@0 115
Chris@0 116 /**
Chris@0 117 * Stores which class constraint has been validated for which object.
Chris@0 118 *
Chris@0 119 * @var array
Chris@0 120 */
Chris@0 121 private $validatedConstraints = array();
Chris@0 122
Chris@0 123 /**
Chris@0 124 * Stores which objects have been initialized.
Chris@0 125 *
Chris@0 126 * @var array
Chris@0 127 */
Chris@0 128 private $initializedObjects;
Chris@0 129
Chris@0 130 /**
Chris@0 131 * Creates a new execution context.
Chris@0 132 *
Chris@0 133 * @param ValidatorInterface $validator The validator
Chris@0 134 * @param mixed $root The root value of the
Chris@0 135 * validated object graph
Chris@0 136 * @param TranslatorInterface $translator The translator
Chris@0 137 * @param string|null $translationDomain The translation domain to
Chris@0 138 * use for translating
Chris@0 139 * violation messages
Chris@0 140 *
Chris@0 141 * @internal Called by {@link ExecutionContextFactory}. Should not be used
Chris@0 142 * in user code.
Chris@0 143 */
Chris@0 144 public function __construct(ValidatorInterface $validator, $root, TranslatorInterface $translator, $translationDomain = null)
Chris@0 145 {
Chris@0 146 $this->validator = $validator;
Chris@0 147 $this->root = $root;
Chris@0 148 $this->translator = $translator;
Chris@0 149 $this->translationDomain = $translationDomain;
Chris@0 150 $this->violations = new ConstraintViolationList();
Chris@0 151 }
Chris@0 152
Chris@0 153 /**
Chris@0 154 * {@inheritdoc}
Chris@0 155 */
Chris@0 156 public function setNode($value, $object, MetadataInterface $metadata = null, $propertyPath)
Chris@0 157 {
Chris@0 158 $this->value = $value;
Chris@0 159 $this->object = $object;
Chris@0 160 $this->metadata = $metadata;
Chris@0 161 $this->propertyPath = (string) $propertyPath;
Chris@0 162 }
Chris@0 163
Chris@0 164 /**
Chris@0 165 * {@inheritdoc}
Chris@0 166 */
Chris@0 167 public function setGroup($group)
Chris@0 168 {
Chris@0 169 $this->group = $group;
Chris@0 170 }
Chris@0 171
Chris@0 172 /**
Chris@0 173 * {@inheritdoc}
Chris@0 174 */
Chris@0 175 public function setConstraint(Constraint $constraint)
Chris@0 176 {
Chris@0 177 $this->constraint = $constraint;
Chris@0 178 }
Chris@0 179
Chris@0 180 /**
Chris@0 181 * {@inheritdoc}
Chris@0 182 */
Chris@0 183 public function addViolation($message, array $parameters = array())
Chris@0 184 {
Chris@0 185 $this->violations->add(new ConstraintViolation(
Chris@0 186 $this->translator->trans($message, $parameters, $this->translationDomain),
Chris@0 187 $message,
Chris@0 188 $parameters,
Chris@0 189 $this->root,
Chris@0 190 $this->propertyPath,
Chris@0 191 $this->value,
Chris@0 192 null,
Chris@0 193 null,
Chris@0 194 $this->constraint
Chris@0 195 ));
Chris@0 196 }
Chris@0 197
Chris@0 198 /**
Chris@0 199 * {@inheritdoc}
Chris@0 200 */
Chris@0 201 public function buildViolation($message, array $parameters = array())
Chris@0 202 {
Chris@0 203 return new ConstraintViolationBuilder(
Chris@0 204 $this->violations,
Chris@0 205 $this->constraint,
Chris@0 206 $message,
Chris@0 207 $parameters,
Chris@0 208 $this->root,
Chris@0 209 $this->propertyPath,
Chris@0 210 $this->value,
Chris@0 211 $this->translator,
Chris@0 212 $this->translationDomain
Chris@0 213 );
Chris@0 214 }
Chris@0 215
Chris@0 216 /**
Chris@0 217 * {@inheritdoc}
Chris@0 218 */
Chris@0 219 public function getViolations()
Chris@0 220 {
Chris@0 221 return $this->violations;
Chris@0 222 }
Chris@0 223
Chris@0 224 /**
Chris@0 225 * {@inheritdoc}
Chris@0 226 */
Chris@0 227 public function getValidator()
Chris@0 228 {
Chris@0 229 return $this->validator;
Chris@0 230 }
Chris@0 231
Chris@0 232 /**
Chris@0 233 * {@inheritdoc}
Chris@0 234 */
Chris@0 235 public function getRoot()
Chris@0 236 {
Chris@0 237 return $this->root;
Chris@0 238 }
Chris@0 239
Chris@0 240 /**
Chris@0 241 * {@inheritdoc}
Chris@0 242 */
Chris@0 243 public function getValue()
Chris@0 244 {
Chris@0 245 return $this->value;
Chris@0 246 }
Chris@0 247
Chris@0 248 /**
Chris@0 249 * {@inheritdoc}
Chris@0 250 */
Chris@0 251 public function getObject()
Chris@0 252 {
Chris@0 253 return $this->object;
Chris@0 254 }
Chris@0 255
Chris@0 256 /**
Chris@0 257 * {@inheritdoc}
Chris@0 258 */
Chris@0 259 public function getMetadata()
Chris@0 260 {
Chris@0 261 return $this->metadata;
Chris@0 262 }
Chris@0 263
Chris@0 264 /**
Chris@0 265 * {@inheritdoc}
Chris@0 266 */
Chris@0 267 public function getGroup()
Chris@0 268 {
Chris@0 269 return $this->group;
Chris@0 270 }
Chris@0 271
Chris@0 272 public function getConstraint()
Chris@0 273 {
Chris@0 274 return $this->constraint;
Chris@0 275 }
Chris@0 276
Chris@0 277 /**
Chris@0 278 * {@inheritdoc}
Chris@0 279 */
Chris@0 280 public function getClassName()
Chris@0 281 {
Chris@0 282 return $this->metadata instanceof MemberMetadata || $this->metadata instanceof ClassMetadataInterface ? $this->metadata->getClassName() : null;
Chris@0 283 }
Chris@0 284
Chris@0 285 /**
Chris@0 286 * {@inheritdoc}
Chris@0 287 */
Chris@0 288 public function getPropertyName()
Chris@0 289 {
Chris@0 290 return $this->metadata instanceof PropertyMetadataInterface ? $this->metadata->getPropertyName() : null;
Chris@0 291 }
Chris@0 292
Chris@0 293 /**
Chris@0 294 * {@inheritdoc}
Chris@0 295 */
Chris@0 296 public function getPropertyPath($subPath = '')
Chris@0 297 {
Chris@0 298 return PropertyPath::append($this->propertyPath, $subPath);
Chris@0 299 }
Chris@0 300
Chris@0 301 /**
Chris@0 302 * {@inheritdoc}
Chris@0 303 */
Chris@0 304 public function markGroupAsValidated($cacheKey, $groupHash)
Chris@0 305 {
Chris@0 306 if (!isset($this->validatedObjects[$cacheKey])) {
Chris@0 307 $this->validatedObjects[$cacheKey] = array();
Chris@0 308 }
Chris@0 309
Chris@0 310 $this->validatedObjects[$cacheKey][$groupHash] = true;
Chris@0 311 }
Chris@0 312
Chris@0 313 /**
Chris@0 314 * {@inheritdoc}
Chris@0 315 */
Chris@0 316 public function isGroupValidated($cacheKey, $groupHash)
Chris@0 317 {
Chris@0 318 return isset($this->validatedObjects[$cacheKey][$groupHash]);
Chris@0 319 }
Chris@0 320
Chris@0 321 /**
Chris@0 322 * {@inheritdoc}
Chris@0 323 */
Chris@0 324 public function markConstraintAsValidated($cacheKey, $constraintHash)
Chris@0 325 {
Chris@0 326 $this->validatedConstraints[$cacheKey.':'.$constraintHash] = true;
Chris@0 327 }
Chris@0 328
Chris@0 329 /**
Chris@0 330 * {@inheritdoc}
Chris@0 331 */
Chris@0 332 public function isConstraintValidated($cacheKey, $constraintHash)
Chris@0 333 {
Chris@0 334 return isset($this->validatedConstraints[$cacheKey.':'.$constraintHash]);
Chris@0 335 }
Chris@0 336
Chris@0 337 /**
Chris@0 338 * {@inheritdoc}
Chris@0 339 */
Chris@0 340 public function markObjectAsInitialized($cacheKey)
Chris@0 341 {
Chris@0 342 $this->initializedObjects[$cacheKey] = true;
Chris@0 343 }
Chris@0 344
Chris@0 345 /**
Chris@0 346 * {@inheritdoc}
Chris@0 347 */
Chris@0 348 public function isObjectInitialized($cacheKey)
Chris@0 349 {
Chris@0 350 return isset($this->initializedObjects[$cacheKey]);
Chris@0 351 }
Chris@0 352 }