根据字段值在表单上添加addError

时间:2016-07-18 07:24:07

标签: symfony

我正在尝试为我的字段添加自定义字段验证,但我无法使其正常工作... 这是我的代码:

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'));
        }
    });
}

我想要的: 如果两个字段都是空的,则警告至少必须填写一个字段... 我好几天都在尝试不同的事情,但我找不到任何解决办法。我猜答案很简单......

感谢您的时间。

2 个答案:

答案 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();
    }
}