Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. AbstractComparisonValidator.php

function AbstractComparisonValidator::validate

Overrides ConstraintValidatorInterface::validate

File

vendor/symfony/validator/Constraints/AbstractComparisonValidator.php, line 35

Class

AbstractComparisonValidator
Provides a base class for the validation of property comparisons.

Namespace

Symfony\Component\Validator\Constraints

Code

public function validate(mixed $value, Constraint $constraint) : void {
    if (!$constraint instanceof AbstractComparison) {
        throw new UnexpectedTypeException($constraint, AbstractComparison::class);
    }
    if (null === $value) {
        return;
    }
    if ($path = $constraint->propertyPath) {
        if (null === ($object = $this->context
            ->getObject())) {
            return;
        }
        try {
            $comparedValue = $this->getPropertyAccessor()
                ->getValue($object, $path);
        } catch (NoSuchPropertyException $e) {
            throw new ConstraintDefinitionException(\sprintf('Invalid property path "%s" provided to "%s" constraint: ', $path, get_debug_type($constraint)) . $e->getMessage(), 0, $e);
        } catch (UninitializedPropertyException) {
            $comparedValue = null;
        }
    }
    else {
        $comparedValue = $constraint->value;
    }
    // Convert strings to date-time objects if comparing to another date-time object
    // This allows to compare with any date/time value supported by date-time constructors:
    // https://php.net/datetime.formats
    if (\is_string($comparedValue) && $value instanceof \DateTimeInterface) {
        try {
            $comparedValue = new $value($comparedValue);
        } catch (\Exception) {
            throw new ConstraintDefinitionException(\sprintf('The compared value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $comparedValue, get_debug_type($value), get_debug_type($constraint)));
        }
    }
    if (!$this->compareValues($value, $comparedValue)) {
        $violationBuilder = $this->context
            ->buildViolation($constraint->message)
            ->setParameter('{{ value }}', $this->formatValue($value, self::OBJECT_TO_STRING | self::PRETTY_DATE))
            ->setParameter('{{ compared_value }}', $this->formatValue($comparedValue, self::OBJECT_TO_STRING | self::PRETTY_DATE))
            ->setParameter('{{ compared_value_type }}', $this->formatTypeOf($comparedValue))
            ->setCode($this->getErrorCode());
        if (null !== $path) {
            $violationBuilder->setParameter('{{ compared_value_path }}', $path);
        }
        $violationBuilder->addViolation();
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal