Как выбирать группы валидации, основанные на отправленных данных
Как выбирать группы валидации, основанные на отправленных данных
Если вам нужна продвинутая логика, чтобы определить группы валидации (наример,
основанные на отправленных данных), вы можете установить опцию 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)
{
$resolver->setDefaults(array(
'validation_groups' => array(
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)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('person');
}
return array('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)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('Default', 'person');
}
return array('Default', 'company');
},
));
}
Вы можете найти больше информации о том, как работают группы валидации и ограничения по умолчанию в статье о Группах валидации.