Symfony 2表单:根据不在实体中的复选框设置所需字段

时间:2016-03-02 08:53:53

标签: forms symfony

我有一个映射到实体的Symfony表单,但有三个可选值。每个值都有一个与之关联的复选框,这些复选框实际上没有映射到实体。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('checkbox1', 'checkbox', array(
            'mapped' => false,
            'label_render' => false,
            'required' => false,
        ))
        ->add('value1', 'text', array(
            'required' => false,
        ))
        ->add('checkbox2', 'checkbox', array(
            'mapped' => false,
            'label_render' => false,
            'required' => false,
        ))
        ->add('value2', 'text', array(
            'required' => false,
        ))
        ->add('checkbox3', 'checkbox', array(
            'mapped' => false,
            'label_render' => false,
            'required' => false,
        ))
        ->add('value3', 'text', array(
            'required' => false,
        ))
    ;
}

如果选中相应的复选框,我想要显示所需的文本字段。我知道实体内部的验证回调,但是这里的复选框字段实际上没有映射,所以我需要表单级别的东西。我在setDefaultOptions方法中看到了有关验证组回调的内容,但所有示例都与实际实体关系过于紧密。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

我认为你需要使用EventListener。

按照文档:http://symfony.com/doc/current/components/form/form_events.html

您可以执行以下操作:

->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
     ->add('value1', 'text', array(
        'required' => true,
    ))
})

选中复选框时。你必须使用Ajax post方法。这很简单。