Как выбирать группы валидации, основанные на отправленных данных
Дата обновления перевода 2023-09-04
Как выбирать группы валидации, основанные на отправленных данных
Если вам нужна продвинутая логика, чтобы определить группы валидации (наример,
основанные на отправленных данных), вы можете установить опцию validation_groups
в обратном вызове массива:
1 2 3 4 5 6 7 8 9 10 11 12 13
use App\Entity\Client;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'validation_groups' => [
Client::class,
'determineValidationGroups',
],
]);
}
Это вызовет статически метод determineValidationGroups()
в классе
Client
после того, как форма будет отправлена, но до выполнения
валидации. Объект Form (форма) передаётся в качестве аргумента к этому
методу (смотрите следующий пример). Вы также можете определить всю логику
линейно, используя Closure
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use App\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'validation_groups' => function (FormInterface $form): array {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return ['person'];
}
return ['company'];
},
]);
}
Использование опции validation_groups
переопределяет используемую по умолчанию
группу валидации. Если вы также хотите валидировать ограничения сущности по умолчанию,
то вам нужно настроить опцию следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use App\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'validation_groups' => function (FormInterface $form): array {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return ['Default', 'person'];
}
return ['Default', 'company'];
},
]);
}
Вы можете найти больше информации о том, как работают группы валидации и ограничения по умолчанию в статье о Группах валидации.