UriHostConstraintValidator.php

Namespace

Drupal\Core\Validation\Plugin\Validation\Constraint

File

core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/UriHostConstraintValidator.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Core\Validation\Plugin\Validation\Constraint;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Exception\UnexpectedTypeException;

/**
 * Validates if a string conforms to the RFC 3986 host component.
 */
class UriHostConstraintValidator extends ConstraintValidator {
    
    /**
     * {@inheritdoc}
     */
    public function validate($value, Constraint $constraint) : void {
        assert($constraint instanceof UriHostConstraint);
        if ($value === NULL || $value === '') {
            return;
        }
        if (!is_string($value)) {
            throw new UnexpectedTypeException($value, 'string');
        }
        if (!$this->isValid($value)) {
            $this->context
                ->addViolation($constraint->message);
        }
    }
    
    /**
     * Return TRUE if value is a valid hostname or IP address literal.
     */
    protected function isValid(string $value) : bool {
        if (filter_var($value, \FILTER_VALIDATE_DOMAIN, \FILTER_FLAG_HOSTNAME) !== FALSE) {
            return TRUE;
        }
        if (str_starts_with($value, '[') && str_ends_with($value, ']')) {
            $address = substr($value, 1, strlen($value) - 2);
            if (filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6) !== FALSE) {
                return TRUE;
            }
        }
        return FALSE;
    }

}

Classes

Title Deprecated Summary
UriHostConstraintValidator Validates if a string conforms to the RFC 3986 host component.

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