View source
<?php
namespace Symfony\Component\Validator\Context;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\ClassBasedInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\Valid;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\Mapping\MetadataInterface;
use Symfony\Component\Validator\Mapping\PropertyMetadataInterface;
use Symfony\Component\Validator\Util\PropertyPath;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
use Symfony\Component\Validator\Violation\ConstraintViolationBuilder;
class ExecutionContext implements ExecutionContextInterface {
private $validator;
private $root;
private $translator;
private $translationDomain;
private $violations;
private $value;
private $object;
private $propertyPath = '';
private $metadata;
private $group;
private $constraint;
private $validatedObjects = array();
private $validatedConstraints = array();
private $initializedObjects;
public function __construct(ValidatorInterface $validator, $root, TranslatorInterface $translator, $translationDomain = null) {
$this->validator = $validator;
$this->root = $root;
$this->translator = $translator;
$this->translationDomain = $translationDomain;
$this->violations = new ConstraintViolationList();
}
public function setNode($value, $object, MetadataInterface $metadata = null, $propertyPath) {
$this->value = $value;
$this->object = $object;
$this->metadata = $metadata;
$this->propertyPath = (string) $propertyPath;
}
public function setGroup($group) {
$this->group = $group;
}
public function setConstraint(Constraint $constraint) {
$this->constraint = $constraint;
}
public function addViolation($message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) {
if (func_num_args() > 2) {
@trigger_error('The parameters $invalidValue, $plural and $code in method ' . __METHOD__ . ' are deprecated since version 2.5 and will be removed in 3.0. Use the ' . __CLASS__ . '::buildViolation method instead.', E_USER_DEPRECATED);
$this
->buildViolation($message, $parameters)
->setInvalidValue($invalidValue)
->setPlural($plural)
->setCode($code)
->addViolation();
return;
}
$this->violations
->add(new ConstraintViolation($this->translator
->trans($message, $parameters, $this->translationDomain), $message, $parameters, $this->root, $this->propertyPath, $this->value, null, null, $this->constraint));
}
public function buildViolation($message, array $parameters = array()) {
return new ConstraintViolationBuilder($this->violations, $this->constraint, $message, $parameters, $this->root, $this->propertyPath, $this->value, $this->translator, $this->translationDomain);
}
public function getViolations() {
return $this->violations;
}
public function getValidator() {
return $this->validator;
}
public function getRoot() {
return $this->root;
}
public function getValue() {
return $this->value;
}
public function getObject() {
return $this->object;
}
public function getMetadata() {
return $this->metadata;
}
public function getGroup() {
return $this->group;
}
public function getClassName() {
return $this->metadata instanceof ClassBasedInterface ? $this->metadata
->getClassName() : null;
}
public function getPropertyName() {
return $this->metadata instanceof PropertyMetadataInterface ? $this->metadata
->getPropertyName() : null;
}
public function getPropertyPath($subPath = '') {
return PropertyPath::append($this->propertyPath, $subPath);
}
public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.5 and will be removed in 3.0. Use the ' . __CLASS__ . '::buildViolation method instead.', E_USER_DEPRECATED);
if (func_num_args() > 2) {
$this
->buildViolation($message, $parameters)
->atPath($subPath)
->setInvalidValue($invalidValue)
->setPlural($plural)
->setCode($code)
->addViolation();
return;
}
$this
->buildViolation($message, $parameters)
->atPath($subPath)
->addViolation();
}
public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false) {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.5 and will be removed in 3.0. Use the ' . __CLASS__ . '::getValidator() method instead.', E_USER_DEPRECATED);
if (is_array($value)) {
$constraint = new Valid(array(
'traverse' => true,
'deep' => $deep,
));
return $this
->getValidator()
->inContext($this)
->atPath($subPath)
->validate($value, $constraint, $groups);
}
if ($traverse && $value instanceof \Traversable) {
$constraint = new Valid(array(
'traverse' => true,
'deep' => $deep,
));
return $this
->getValidator()
->inContext($this)
->atPath($subPath)
->validate($value, $constraint, $groups);
}
return $this
->getValidator()
->inContext($this)
->atPath($subPath)
->validate($value, null, $groups);
}
public function validateValue($value, $constraints, $subPath = '', $groups = null) {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.5 and will be removed in 3.0. Use the ' . __CLASS__ . '::getValidator() method instead.', E_USER_DEPRECATED);
return $this
->getValidator()
->inContext($this)
->atPath($subPath)
->validate($value, $constraints, $groups);
}
public function getMetadataFactory() {
@trigger_error('The ' . __METHOD__ . ' is deprecated since version 2.5 and will be removed in 3.0. Use the new Symfony\\Component\\Validator\\Context\\ExecutionContext::getValidator method in combination with Symfony\\Component\\Validator\\Validator\\ValidatorInterface::getMetadataFor or Symfony\\Component\\Validator\\Validator\\ValidatorInterface::hasMetadataFor method instead.', E_USER_DEPRECATED);
$validator = $this
->getValidator();
if ($validator instanceof LegacyValidatorInterface) {
return $validator
->getMetadataFactory();
}
return $validator;
}
public function markGroupAsValidated($cacheKey, $groupHash) {
if (!isset($this->validatedObjects[$cacheKey])) {
$this->validatedObjects[$cacheKey] = array();
}
$this->validatedObjects[$cacheKey][$groupHash] = true;
}
public function isGroupValidated($cacheKey, $groupHash) {
return isset($this->validatedObjects[$cacheKey][$groupHash]);
}
public function markConstraintAsValidated($cacheKey, $constraintHash) {
$this->validatedConstraints[$cacheKey . ':' . $constraintHash] = true;
}
public function isConstraintValidated($cacheKey, $constraintHash) {
return isset($this->validatedConstraints[$cacheKey . ':' . $constraintHash]);
}
public function markObjectAsInitialized($cacheKey) {
$this->initializedObjects[$cacheKey] = true;
}
public function isObjectInitialized($cacheKey) {
return isset($this->initializedObjects[$cacheKey]);
}
}