我正在尝试为我的字段添加自定义字段验证,但我无法使其正常工作... 这是我的代码:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('somefields', ChoiceType::Class, array(
'...'
))
->add('tel', TextType::class, array(
'label' => "Téléphone :",
'required' => false
))
->add('cell', TextType::class, array(
'label' => "Port. :",
'required' => false
))
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) {
$data = $event->getData();
$form = $event->getForm();
if (empty($data['tel']) && empty($data['cell'])) {
$form->get('tel')->addError(new FormError('error message'));
}
});
}
我想要的: 如果两个字段都是空的,则警告至少必须填写一个字段... 我好几天都在尝试不同的事情,但我找不到任何解决办法。我猜答案很简单......
感谢您的时间。
答案 0 :(得分:0)
你有没有试过这样的事情:
if ( ($form->get('tel')->getData() == '') && ($form->get('cell')->getData() == '') ) {
$form->get('tel')->addError(new FormError('error message'));
}
看看它是否有效,不确定它是否会发生。
答案 1 :(得分:0)
好吧,我设法以另一种方式做到了。 我在我的实体中添加了一个回调
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload) {
if (empty($this->getTel()) && empty($this->getCell())) {
$context->buildViolation('validation message')
->atPath('tel')
->addViolation();
$context->buildViolation('validation message')
->atPath('cell')
->addViolation();
}
}