Symfony2表单验证 - 应用条件validation_group

时间:2014-10-27 20:41:37

标签: symfony

有没有办法根据表单中的选定值强制执行不同的验证组?例如,如果我有付款信息表单并且选择了“信用卡”,那么我将应用“credit_card”验证组。如果不是,那么我将应用默认验证组。我知道如何在创建表单时设置验证组,但是,我不知道如何根据表单的值动态设置它。

我正在尝试避免使用回调,因为我想使用Symfony的内置验证器。

1 个答案:

答案 0 :(得分:0)

事实证明,您可以在表单的setDefaultOptions方法中执行此操作:

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'IRC\GlobalBundle\Form\Entity\Checkout\OrderPayment',
                'validation_groups' => function(FormInterface $form) {
                    /** @var PaymentType $paymentType */
                    $paymentType = $form->getData()->getPaymentType();
                    if ($paymentType->getId() === PaymentType::CREDIT_CARD) {
                        return array('credit_card');
                    } else {
                        return false;
                    }
                },
            )
        );
    }