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\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\Exception\BadMethodCallException;
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\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) {
throw new BadMethodCallException('The parameters $invalidValue, $pluralization and $code are ' . 'not supported anymore as of Symfony 2.5. Please use ' . 'buildViolation() instead or enable the legacy mode.');
}
$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) {
throw new BadMethodCallException('addViolationAt() is not supported anymore as of Symfony 2.5. ' . 'Please use buildViolation() instead or enable the legacy mode.');
}
public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false) {
throw new BadMethodCallException('validate() is not supported anymore as of Symfony 2.5. ' . 'Please use getValidator() instead or enable the legacy mode.');
}
public function validateValue($value, $constraints, $subPath = '', $groups = null) {
throw new BadMethodCallException('validateValue() is not supported anymore as of Symfony 2.5. ' . 'Please use getValidator() instead or enable the legacy mode.');
}
public function getMetadataFactory() {
throw new BadMethodCallException('getMetadataFactory() is not supported anymore as of Symfony 2.5. ' . 'Please use getValidator() in combination with getMetadataFor() ' . 'or hasMetadataFor() instead or enable the legacy mode.');
}
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]);
}
}