. */ declare(strict_types=1); namespace App\Validator\Constraints; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Constraints\UrlValidator; use Symfony\Component\Validator\Exception\UnexpectedTypeException; use Symfony\Component\Validator\Exception\UnexpectedValueException; use function in_array; use function is_object; /** * The validator for UrlOrBuiltin. * It checks if the value is either a builtin ressource or a valid url. * In both cases it is not checked, if the ressource is really existing. */ class UrlOrBuiltinValidator extends UrlValidator { public function validate($value, Constraint $constraint): void { if (!$constraint instanceof UrlOrBuiltin) { throw new UnexpectedTypeException($constraint, UrlOrBuiltin::class); } if (null === $value || '' === $value) { return; } if (!is_scalar($value) && !(is_object($value) && method_exists($value, '__toString'))) { throw new UnexpectedValueException($value, 'string'); } $value = (string) $value; if ('' === $value) { return; } //After the %PLACEHOLDER% comes a slash, so we can check if we have a placholder via explode $tmp = explode('/', $value); //Builtins must have a %PLACEHOLDER% construction if (in_array($tmp[0], $constraint->allowed_placeholders, false)) { return; } parent::validate($value, $constraint); // TODO: Change the autogenerated stub } }