我有以下表单元素
$builder->add('link_to', ChoiceType::class, [
'label' => 'Link To *',
'choices' => [
'Session' => 'session',
'Category' => 'category',
'External URL' => 'url'
]
]);
$builder->add('category', EntityType::class, [
'label' => 'Category *',
'class' => \App\Entity\Category::class,
'choice_label' => 'translations[en].name'
]);
$builder->add('session', EntityType::class, [
'label' => 'Session *',
'class' => \App\Entity\Session::class,
'choice_label' => 'translations[en].title'
]);
$builder->add('url', TextType::class, [
'label' => 'External URL *'
]);
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'attr' => ['novalidate' => 'novalidate'],
'data_class' => \App\Entity\Banner::class
]);
}我想将NotBlank()验证器添加到基于来自link_to字段的值的category, session or url字段,例如,如果用户在link_to字段中选择了Session,则Session字段必须是必填字段,依此类推。
我试着使用验证组,但我感到困惑,有人能帮我解决如何使用验证组或其他方法吗?
谢谢。
发布于 2019-12-11 18:01:53
我会为整个Banner类设置一个自定义的validator constraint。这是因为您可以基于整个对象执行复杂的验证规则:
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
…
'constraints' => YourValidatorConstraint::class
]);
}如果不需要额外的类,可以使用Callback约束:
$resolver->setDefaults([
…
'constraints' => new Callback(['callback' => [$this, 'validate']]),
]);
public function validate($object, ExecutionContextInterface $context, $payload)
{
// go bananas
}https://stackoverflow.com/questions/59283126
复制相似问题