我在一个表单中有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验证来实现这一目标。
提前致谢。
答案 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');
}
}
}