我创建了一个包含一些字段的表单,其所需的状态取决于输入到另一个字段的值(具体来说,值是否为> 0)。
关于订购教科书,如果数量是> 0,然后还必须输入与地址相关的字段。 我添加了一个自定义验证回调,可以检查计数是否为> 0然后添加违规。但只有当字段不为空时才会执行它(因为它不是“必需”)。
是否有办法始终验证,但无需在字段上使用所需的标志?
在片段下面:
[...]
$builder->add('firstname', 'text', array(
'label' => 'label.firstname',
'required' => false,
'property_path' => 'Order.firstname',
'constraints' => array(
new Callback(array('callback' => array($this, 'validateOrder')))
)
));
[...]
public function validateOrder($data, ExecutionContextInterface $context)
{
/** @var \Symfony\Component\Form\Form $form */
$form = $context->getRoot();
if(
(
(int)$form->get('count_d')->getData() > 0 ||
(int)$form->get('count_f')->getData() > 0 ||
(int)$form->get('count_i')->getData() > 0
) && $data == '') {
$context->addViolation('profile.order.error');
}
}
答案 0 :(得分:0)
将回调直接放在表单(而不是字段)不是更合适吗?
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'constraints' => array(
new Callback(array('callback' => array($this, 'validateOrder')))
)
));
}
这样,无论如何都会调用回调...