Метод get класса ConstraintViolationList
Метод get класса ConstraintViolationList
возвращает объект ConstraintViolation по его
индексу в коллекции. Первым параметром передаётся
целое число - позиция нарушения в списке. Нумерация
начинается с нуля. Если по указанному индексу
элемента нет, будет выброшено исключение
OutOfBoundsException. Метод удобен, когда
нужно достать конкретную ошибку валидации, а не
перебирать весь список целиком.
Синтаксис
public function get(int $index): ConstraintViolation
Пример
Давайте создадим валидатор и получим первое нарушение из списка:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentValidatorValidation;
use SymfonyComponentValidatorConstraintsNotBlank;
class ArticleController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$res = $validator->validate('', [
new NotBlank(),
]);
$violation = $res->get(0);
return new Response($violation->getMessage());
}
}
?>
Результат выполнения кода:
This value should not be blank.
Пример
Давайте переберём все ошибки списка по индексам
через метод get:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentValidatorValidation;
use SymfonyComponentValidatorConstraintsNotBlank;
use SymfonyComponentValidatorConstraintsLength;
class ArticleController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$res = $validator->validate('abcde', [
new NotBlank(),
new Length(['min' => 10]),
]);
$messages = [];
for ($i = 0; $i < $res->count(); $i++) {
$messages[] = $res->get($i)->getMessage();
}
return new Response(implode(', ', $messages));
}
}
?>
Результат выполнения кода:
This value is too short. It should have 10 characters or more.
Пример
Давайте получим не только сообщение, но и путь свойства, к которому относится нарушение:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentValidatorValidation;
use SymfonyComponentValidatorConstraintsNotBlank;
class ArticleController extends AbstractController
{
public function index(): Response
{
$validator = Validation::createValidator();
$res = $validator->validate('', [
new NotBlank(),
]);
$violation = $res->get(0);
return new Response(
$violation->getPropertyPath()
. ': '
. $violation->getMessage()
);
}
}
?>
Результат выполнения кода:
": This value should not be blank."
Смотрите также
-
класс
ConstraintViolationList,
который хранит список нарушений валидации -
метод
count,
который возвращает количество ошибок в списке -
метод
has,
который проверяет наличие ошибки по индексу -
метод
validate,
который запускает валидацию и возвращает список ошибок