class ExpressionValidator in Plug 7
@author Fabien Potencier <fabien@symfony.com> @author Bernhard Schussek <bschussek@symfony.com>
Hierarchy
- class \Symfony\Component\Validator\ConstraintValidator implements ConstraintValidatorInterface
- class \Symfony\Component\Validator\Constraints\ExpressionValidator
Expanded class hierarchy of ExpressionValidator
2 files declare their use of ExpressionValidator
- ConstraintValidatorFactory.php in lib/
Symfony/ validator/ Symfony/ Component/ Validator/ ConstraintValidatorFactory.php - ExpressionValidatorTest.php in lib/
Symfony/ validator/ Symfony/ Component/ Validator/ Tests/ Constraints/ ExpressionValidatorTest.php
File
- lib/
Symfony/ validator/ Symfony/ Component/ Validator/ Constraints/ ExpressionValidator.php, line 28
Namespace
Symfony\Component\Validator\ConstraintsView source
class ExpressionValidator extends ConstraintValidator {
/**
* @var PropertyAccessorInterface
*/
private $propertyAccessor;
/**
* @var ExpressionLanguage
*/
private $expressionLanguage;
/**
* @param PropertyAccessorInterface|null $propertyAccessor Optional as of Symfony 2.5
*
* @throws UnexpectedTypeException If the property accessor is invalid
*/
public function __construct($propertyAccessor = null) {
if (null !== $propertyAccessor && !$propertyAccessor instanceof PropertyAccessorInterface) {
throw new UnexpectedTypeException($propertyAccessor, 'null or \\Symfony\\Component\\PropertyAccess\\PropertyAccessorInterface');
}
$this->propertyAccessor = $propertyAccessor;
}
/**
* {@inheritdoc}
*/
public function validate($value, Constraint $constraint) {
if (!$constraint instanceof Expression) {
throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\\Expression');
}
$variables = array();
// Symfony 2.5+
if ($this->context instanceof ExecutionContextInterface) {
$variables['value'] = $value;
$variables['this'] = $this->context
->getObject();
}
elseif (null === $this->context
->getPropertyName()) {
$variables['value'] = $value;
$variables['this'] = $value;
}
else {
$root = $this->context
->getRoot();
$variables['value'] = $value;
if (is_object($root)) {
// Extract the object that the property belongs to from the object
// graph
$path = new PropertyPath($this->context
->getPropertyPath());
$parentPath = $path
->getParent();
$variables['this'] = $parentPath ? $this
->getPropertyAccessor()
->getValue($root, $parentPath) : $root;
}
else {
$variables['this'] = null;
}
}
if (!$this
->getExpressionLanguage()
->evaluate($constraint->expression, $variables)) {
$this
->buildViolation($constraint->message)
->setParameter('{{ value }}', $this
->formatValue($value))
->addViolation();
}
}
private function getExpressionLanguage() {
if (null === $this->expressionLanguage) {
if (!class_exists('Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage')) {
throw new RuntimeException('Unable to use expressions as the Symfony ExpressionLanguage component is not installed.');
}
$this->expressionLanguage = new ExpressionLanguage();
}
return $this->expressionLanguage;
}
private function getPropertyAccessor() {
if (null === $this->propertyAccessor) {
if (!class_exists('Symfony\\Component\\PropertyAccess\\PropertyAccess')) {
throw new RuntimeException('Unable to use expressions as the Symfony PropertyAccess component is not installed.');
}
$this->propertyAccessor = PropertyAccess::createPropertyAccessor();
}
return $this->propertyAccessor;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConstraintValidator:: |
protected | property | ||
ConstraintValidator:: |
protected | function | Wrapper for {@link ExecutionContextInterface::buildViolation} that supports the 2.4 context API. | |
ConstraintValidator:: |
protected | function | Wrapper for {@link ExecutionContextInterface::buildViolation} that supports the 2.4 context API. | |
ConstraintValidator:: |
protected | function | Returns a string representation of the type of the value. | |
ConstraintValidator:: |
protected | function | Returns a string representation of the value. | |
ConstraintValidator:: |
protected | function | Returns a string representation of a list of values. | |
ConstraintValidator:: |
public | function |
Initializes the constraint validator. Overrides ConstraintValidatorInterface:: |
1 |
ConstraintValidator:: |
constant | Whether to cast objects with a "__toString()" method to strings. | ||
ConstraintValidator:: |
constant | Whether to format {@link \DateTime} objects as RFC-3339 dates ("Y-m-d H:i:s"). | ||
ExpressionValidator:: |
private | property | ||
ExpressionValidator:: |
private | property | ||
ExpressionValidator:: |
private | function | ||
ExpressionValidator:: |
private | function | ||
ExpressionValidator:: |
public | function |
Checks if the passed value is valid. Overrides ConstraintValidatorInterface:: |
|
ExpressionValidator:: |
public | function |