DateTimeFormatConstraintValidator.php

Same filename in other branches
  1. 8.9.x core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php
  2. 10 core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php
  3. 11.x core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php

Namespace

Drupal\datetime\Plugin\Validation\Constraint

File

core/modules/datetime/src/Plugin/Validation/Constraint/DateTimeFormatConstraintValidator.php

View source
<?php

namespace Drupal\datetime\Plugin\Validation\Constraint;

use Drupal\Component\Datetime\DateTimePlus;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * Constraint validator for DateTime items to ensure the format is correct.
 */
class DateTimeFormatConstraintValidator extends ConstraintValidator {
    
    /**
     * {@inheritdoc}
     */
    public function validate($item, Constraint $constraint) {
        
        /** @var \Drupal\datetime\Plugin\Field\FieldType\DateTimeItem $item */
        if (isset($item)) {
            $value = $item->getValue()['value'];
            if (!is_string($value)) {
                $this->context
                    ->addViolation($constraint->badType);
            }
            else {
                $datetime_type = $item->getFieldDefinition()
                    ->getSetting('datetime_type');
                $format = $datetime_type === DateTimeItem::DATETIME_TYPE_DATE ? DateTimeItemInterface::DATE_STORAGE_FORMAT : DateTimeItemInterface::DATETIME_STORAGE_FORMAT;
                $date = NULL;
                try {
                    $date = DateTimePlus::createFromFormat($format, $value, new \DateTimeZone(DateTimeItemInterface::STORAGE_TIMEZONE));
                } catch (\InvalidArgumentException $e) {
                    $this->context
                        ->addViolation($constraint->badFormat, [
                        '@value' => $value,
                        '@format' => $format,
                    ]);
                    return;
                } catch (\UnexpectedValueException $e) {
                    $this->context
                        ->addViolation($constraint->badValue, [
                        '@value' => $value,
                        '@format' => $format,
                    ]);
                    return;
                }
                if ($date === NULL || $date->hasErrors()) {
                    $this->context
                        ->addViolation($constraint->badFormat, [
                        '@value' => $value,
                        '@format' => $format,
                    ]);
                }
            }
        }
    }

}

Classes

Title Deprecated Summary
DateTimeFormatConstraintValidator Constraint validator for DateTime items to ensure the format is correct.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.