Base class for constraint validators.

@author Bernhard Schussek <bschussek@gmail.com>

@api

Hierarchy

  • class ConstraintValidator implements \Symfony\Component\Validator\ConstraintValidatorInterface

Expanded class hierarchy of ConstraintValidator

47 files declare their use of ConstraintValidator
AbstractComparisonValidator.php in core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AbstractComparisonValidator.php
AllValidator.php in core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/AllValidator.php
BlankValidator.php in core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/BlankValidator.php
BundleConstraintValidator.php in core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/BundleConstraintValidator.php
Contains \Drupal\Core\Entity\Plugin\Validation\Constraint\BundleConstraintValidator.
CallbackValidator.php in core/vendor/symfony/validator/Symfony/Component/Validator/Constraints/CallbackValidator.php

... See full list

File

core/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidator.php, line 25

Namespace

Symfony\Component\Validator
View source
abstract class ConstraintValidator implements ConstraintValidatorInterface
 {
  /**
   * Whether to format {@link \DateTime} objects as RFC-3339 dates
   * ("Y-m-d H:i:s").
   *
   * @var int
   */
  const PRETTY_DATE = 1;

  /**
   * Whether to cast objects with a "__toString()" method to strings.
   *
   * @var int
   */
  const OBJECT_TO_STRING = 2;

  /**
   * @var ExecutionContextInterface
   */
  protected $context;

  /**
   * {@inheritdoc}
   */
  public function initialize(ExecutionContextInterface $context) 
   {
    $this->context = $context;
  }

  /**
   * Wrapper for {@link ExecutionContextInterface::buildViolation} that
   * supports the 2.4 context API.
   *
   * @param string $message    The violation message
   * @param array  $parameters The message parameters
   *
   * @return ConstraintViolationBuilderInterface The violation builder
   *
   * @deprecated This method will be removed in Symfony 3.0.
   */
  protected function buildViolation($message, array $parameters = array()) 
   {
    if ($this->context instanceof ExecutionContextInterface2Dot5) {
      return $this->context->buildViolation($message, $parameters);
    }

    return new LegacyConstraintViolationBuilder($this->context, $message, $parameters);
  }

  /**
   * Wrapper for {@link ExecutionContextInterface::buildViolation} that
   * supports the 2.4 context API.
   *
   * @param ExecutionContextInterface $context    The context to use
   * @param string                    $message    The violation message
   * @param array                     $parameters The message parameters
   *
   * @return ConstraintViolationBuilderInterface The violation builder
   *
   * @deprecated This method will be removed in Symfony 3.0.
   */
  protected function buildViolationInContext(ExecutionContextInterface $context, $message, array $parameters = array()) 
   {
    if ($context instanceof ExecutionContextInterface2Dot5) {
      return $context->buildViolation($message, $parameters);
    }

    return new LegacyConstraintViolationBuilder($context, $message, $parameters);
  }

  /**
   * Returns a string representation of the type of the value.
   *
   * This method should be used if you pass the type of a value as
   * message parameter to a constraint violation. Note that such
   * parameters should usually not be included in messages aimed at
   * non-technical people.
   *
   * @param mixed $value The value to return the type of
   *
   * @return string The type of the value
   */
  protected function formatTypeOf($value) 
   {
    return is_object($value) ? get_class($value) : gettype($value);
  }

  /**
   * Returns a string representation of the value.
   *
   * This method returns the equivalent PHP tokens for most scalar types
   * (i.e. "false" for false, "1" for 1 etc.). Strings are always wrapped
   * in double quotes ("). Objects, arrays and resources are formatted as
   * "object", "array" and "resource". If the parameter $prettyDateTime
   * is set to true, {@link \DateTime} objects will be formatted as
   * RFC-3339 dates ("Y-m-d H:i:s").
   *
   * Be careful when passing message parameters to a constraint violation
   * that (may) contain objects, arrays or resources. These parameters
   * should only be displayed for technical users. Non-technical users
   * won't know what an "object", "array" or "resource" is and will be
   * confused by the violation message.
   *
   * @param mixed $value  The value to format as string
   * @param int   $format A bitwise combination of the format
   *                      constants in this class
   *
   * @return string The string representation of the passed value
   */
  protected function formatValue($value, $format = 0) 
   {
    $isDateTime = $value instanceof \DateTime || $value instanceof \DateTimeInterface;

    if (($format & self::PRETTY_DATE) && $isDateTime) {
      if (class_exists('IntlDateFormatter')) {
        $locale = \Locale::getDefault();
        $formatter = new \IntlDateFormatter($locale, \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT);

        // neither the native nor the stub IntlDateFormatter support
        // DateTimeImmutable as of yet
        if (!$value instanceof \DateTime) {
          $value = new \DateTime(
          $value->format('Y-m-d H:i:s.u e'), 
          $value->getTimezone()
          );
        }

        return $formatter->format($value);
      }

      return $value->format('Y-m-d H:i:s');
    }

    if (is_object($value)) {
      if ($format & self::OBJECT_TO_STRING && method_exists($value, '__toString')) {
        return $value->__toString();
      }

      return 'object';
    }

    if (is_array($value)) {
      return 'array';
    }

    if (is_string($value)) {
      return '"' . $value . '"';
    }

    if (is_resource($value)) {
      return 'resource';
    }

    if (null === $value) {
      return 'null';
    }

    if (false === $value) {
      return 'false';
    }

    if (true === $value) {
      return 'true';
    }

    return (string) $value;
  }

  /**
   * Returns a string representation of a list of values.
   *
   * Each of the values is converted to a string using
   * {@link formatValue()}. The values are then concatenated with commas.
   *
   * @param array $values A list of values
   * @param int   $format A bitwise combination of the format
   *                      constants in this class
   *
   * @return string The string representation of the value list
   *
   * @see formatValue()
   */
  protected function formatValues(array $values, $format = 0) 
   {
    foreach ($values as $key => $value) {
      $values [$key] = $this->formatValue($value, $format);
    }

    return implode(', ', $values);
  }
}

Members

Contains filters are case sensitive
Namesort descending Modifiers Type Description
ConstraintValidator::$context protected property
ConstraintValidator::buildViolation Deprecated protected function Wrapper for {@link ExecutionContextInterface::buildViolation} that supports the 2.4 context API.
ConstraintValidator::buildViolationInContext Deprecated protected function Wrapper for {@link ExecutionContextInterface::buildViolation} that supports the 2.4 context API.
ConstraintValidator::formatTypeOf protected function Returns a string representation of the type of the value.
ConstraintValidator::formatValue protected function Returns a string representation of the value.
ConstraintValidator::formatValues protected function Returns a string representation of a list of values.
ConstraintValidator::initialize public function
ConstraintValidator::OBJECT_TO_STRING constant Whether to cast objects with a "__toString()" method to strings.
ConstraintValidator::PRETTY_DATE constant Whether to format {@link \DateTime} objects as RFC-3339 dates ("Y-m-d H:i:s").