[Validator] Catch expected ValueError.

This commit is contained in:
Alexander M. Turek 2020-05-22 18:14:17 +02:00
parent e220e7cc01
commit 8f3f67f82a
1 changed files with 10 additions and 2 deletions

View File

@ -39,8 +39,14 @@ class LengthValidator extends ConstraintValidator
$stringValue = (string) $value;
if (!$invalidCharset = !@mb_check_encoding($stringValue, $constraint->charset)) {
$length = mb_strlen($stringValue, $constraint->charset);
try {
$invalidCharset = !@mb_check_encoding($stringValue, $constraint->charset);
} catch (\ValueError $e) {
if (!str_starts_with($e->getMessage(), 'mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding')) {
throw $e;
}
$invalidCharset = true;
}
if ($invalidCharset) {
@ -54,6 +60,8 @@ class LengthValidator extends ConstraintValidator
return;
}
$length = mb_strlen($stringValue, $constraint->charset);
if (null !== $constraint->max && $length > $constraint->max) {
$this->context->buildViolation($constraint->min == $constraint->max ? $constraint->exactMessage : $constraint->maxMessage)
->setParameter('{{ value }}', $this->formatValue($stringValue))