. */ declare(strict_types=1); namespace App\Validator\Constraints; use GtinValidation\GtinValidator; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\Exception\UnexpectedTypeException; class ValidGTINValidator extends ConstraintValidator { public function validate(mixed $value, Constraint $constraint): void { if (!$constraint instanceof ValidGTIN) { throw new UnexpectedTypeException($constraint, ValidGTIN::class); } if (null === $value || '' === $value) { return; } if (!is_string($value)) { throw new UnexpectedTypeException($value, 'string'); } $gtinValidator = new GtinValidator($value); if (!$gtinValidator->isValid()) { $this->context->buildViolation('validator.invalid_gtin') ->addViolation(); } } }