Symfony2在空字段上形成条件验证

时间:2014-06-18 09:15:36

标签: php forms validation symfony

我创建了一个包含一些字段的表单,其所需的状态取决于输入到另一个字段的值(具体来说,值是否为> 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');
    }
}

1 个答案:

答案 0 :(得分:0)

将回调直接放在表单(而不是字段)不是更合适吗?

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'constraints' => array(
            new Callback(array('callback' => array($this, 'validateOrder')))
        )
    ));
}

这样,无论如何都会调用回调...