View source
<?php
namespace Symfony\Component\Validator;
use Symfony\Component\Translation\TranslatorInterface;
class ExecutionContext implements ExecutionContextInterface {
private $globalContext;
private $translator;
private $translationDomain;
private $metadata;
private $value;
private $group;
private $propertyPath;
public function __construct(GlobalExecutionContextInterface $globalContext, TranslatorInterface $translator, $translationDomain = null, MetadataInterface $metadata = null, $value = null, $group = null, $propertyPath = '') {
if (null === $group) {
$group = Constraint::DEFAULT_GROUP;
}
$this->globalContext = $globalContext;
$this->translator = $translator;
$this->translationDomain = $translationDomain;
$this->metadata = $metadata;
$this->value = $value;
$this->propertyPath = $propertyPath;
$this->group = $group;
}
public function addViolation($message, array $params = array(), $invalidValue = null, $plural = null, $code = null) {
if (null === $plural) {
$translatedMessage = $this->translator
->trans($message, $params, $this->translationDomain);
}
else {
try {
$translatedMessage = $this->translator
->transChoice($message, $plural, $params, $this->translationDomain);
} catch (\InvalidArgumentException $e) {
$translatedMessage = $this->translator
->trans($message, $params, $this->translationDomain);
}
}
$this->globalContext
->getViolations()
->add(new ConstraintViolation($translatedMessage, $message, $params, $this->globalContext
->getRoot(), $this->propertyPath, func_num_args() >= 3 ? $invalidValue : $this->value, $plural, $code));
}
public function addViolationAt($subPath, $message, array $parameters = array(), $invalidValue = null, $plural = null, $code = null) {
$this->globalContext
->getViolations()
->add(new ConstraintViolation(null === $plural ? $this->translator
->trans($message, $parameters, $this->translationDomain) : $this->translator
->transChoice($message, $plural, $parameters, $this->translationDomain), $message, $parameters, $this->globalContext
->getRoot(), $this
->getPropertyPath($subPath), func_num_args() >= 4 ? $invalidValue : $this->value, $plural, $code));
}
public function getViolations() {
return $this->globalContext
->getViolations();
}
public function getRoot() {
return $this->globalContext
->getRoot();
}
public function getPropertyPath($subPath = '') {
if ('' != $subPath && '' !== $this->propertyPath && '[' !== $subPath[0]) {
return $this->propertyPath . '.' . $subPath;
}
return $this->propertyPath . $subPath;
}
public function getClassName() {
if ($this->metadata instanceof ClassBasedInterface) {
return $this->metadata
->getClassName();
}
}
public function getPropertyName() {
if ($this->metadata instanceof PropertyMetadataInterface) {
return $this->metadata
->getPropertyName();
}
}
public function getValue() {
return $this->value;
}
public function getGroup() {
return $this->group;
}
public function getMetadata() {
return $this->metadata;
}
public function getMetadataFor($value) {
return $this->globalContext
->getMetadataFactory()
->getMetadataFor($value);
}
public function validate($value, $subPath = '', $groups = null, $traverse = false, $deep = false) {
$propertyPath = $this
->getPropertyPath($subPath);
foreach ($this
->resolveGroups($groups) as $group) {
$this->globalContext
->getVisitor()
->validate($value, $group, $propertyPath, $traverse, $deep);
}
}
public function validateValue($value, $constraints, $subPath = '', $groups = null) {
$constraints = is_array($constraints) ? $constraints : array(
$constraints,
);
if (null === $groups && '' === $subPath) {
$context = clone $this;
$context->value = $value;
$context
->executeConstraintValidators($value, $constraints);
return;
}
$propertyPath = $this
->getPropertyPath($subPath);
foreach ($this
->resolveGroups($groups) as $group) {
$context = clone $this;
$context->value = $value;
$context->group = $group;
$context->propertyPath = $propertyPath;
$context
->executeConstraintValidators($value, $constraints);
}
}
public function getMetadataFactory() {
return $this->globalContext
->getMetadataFactory();
}
private function executeConstraintValidators($value, array $constraints) {
foreach ($constraints as $constraint) {
$validator = $this->globalContext
->getValidatorFactory()
->getInstance($constraint);
$validator
->initialize($this);
$validator
->validate($value, $constraint);
}
}
private function resolveGroups($groups) {
return $groups ? (array) $groups : (array) $this->group;
}
}