Метод inContext
Метод inContext класса Validator выполняет валидацию
объекта в конкретной группе валидации. Первым параметром
передаётся объект для проверки, вторым - имя группы валидации.
Возвращается объект ConstraintViolationList со списком найденных ошибок.
Метод удобен, когда у одной сущности есть несколько наборов правил, например для регистрации и для редактирования профиля.
Синтаксис
public function inContext(mixed $value, string|GroupSequence|array $groups): ConstraintViolationListInterface
Пример
Давайте создадим сущность User с двумя группами валидации
и проверим её методом inContext:
<?php
namespace AppEntity;
use SymfonyComponentValidatorConstraints as Assert;
class User
{
#[AssertNotBlank(groups: ['registration'])]
#[AssertLength(min: 3, groups: ['registration', 'profile'])]
public string $name = '';
#[AssertNotBlank(groups: ['registration'])]
#[AssertEmail(groups: ['registration', 'profile'])]
public string $email = '';
}
?>
Теперь проверим объект в группе registration:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentValidatorValidatorValidatorInterface;
class UserController extends AbstractController
{
public function index(ValidatorInterface $validator): Response
{
$user = new User();
$user->name = 'ab';
$user->email = 'invalid';
$res = $validator->inContext($user, 'registration');
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
AppEntityUser.name: This value is too short. It should have 3 characters or more.
AppEntityUser.email: This value is not a valid email address.
Пример
Давайте проверим тот же объект в группе profile:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentValidatorValidatorValidatorInterface;
class UserController extends AbstractController
{
public function index(ValidatorInterface $validator): Response
{
$user = new User();
$user->name = 'ab';
$user->email = 'invalid';
$res = $validator->inContext($user, 'profile');
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
AppEntityUser.name: This value is too short. It should have 3 characters or more.
AppEntityUser.email: This value is not a valid email address.
Пример
Давайте передадим массив групп для проверки в нескольких контекстах:
<?php
namespace AppController;
use AppEntityUser;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentValidatorValidatorValidatorInterface;
class UserController extends AbstractController
{
public function index(ValidatorInterface $validator): Response
{
$user = new User();
$user->name = 'abcde';
$user->email = 'user@example.com';
$res = $validator->inContext($user, ['registration', 'profile']);
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
""
Смотрите также
-
класс
Validator,
который выполняет валидацию объектов -
метод
validate,
который проверяет объект по всем группам -
метод
validateProperty,
который проверяет отдельное свойство объекта -
класс
ConstraintViolationList,
который хранит список ошибок валидации