多字段的Symfony2表单验证只需要一个

时间:2015-08-04 11:39:32

标签: validation symfony

我在一个表单中有5个字段,如下所示:

class ItempriceFormType扩展AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options) {

    $builder->add('pergramprice', 'text', array('required' => false))
            ->add('eighthprice', 'text', array('required' => false))
            ->add('quarterprice', 'text', array('required' => false))
            ->add('halfprice', 'text', array('required' => false))
            ->add('ounceprice', 'text', array('required' => false))
    ;
}

public function setDefaultOptions(OptionsResolverInterface $resolver) {
    $resolver->setDefaults(array(
        'data_class' => 'Acme\FrontBundle\Entity\Itemprice',
    ));
}

public function getName() {
    return 'items_price';
}

}

我想验证只有一个字段意味着只需要5个字段中的一个字段。那么如何通过symfony 2验证来实现这一目标。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以在Itemprice实体定义@Assert\Callback注释中使用自定义验证器根据多个字段进行验证,并检查所有价格字段是否为空,然后显示错误

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContextInterface;
/**
 * @Assert\Callback(methods={"checkPriceValidation"})
 */
class Itemprice
{
    public function checkPriceValidation(ExecutionContextInterface $context)
    {
        $pergramprice = $this->getPergramprice();
        $eighthprice = $this->getEighthprice();
        $quarterprice = $this->getQuarterprice();
        $halfprice = $this->getHalfprice();
        $ounceprice = $this->getOunceprice();
        if(
        empty($pergramprice)
        && empty($eighthprice)
        && empty($quarterprice)
        && empty($halfprice)
        && empty($ounceprice)
        ){
            $context->addViolationAt('pergramprice', 'Please enter atleast one price');
        }
    }
}