【问题标题】:Symfony 2 Form: Set field required depending on checkbox not in entitySymfony 2 Form:根据不在实体中的复选框设置必填字段
【发布时间】:2016-03-03 00:01:52
【问题描述】:

我有一个映射到实体的 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 方法中看到了一些关于验证组回调的内容,但是所有示例都与实际实体密切相关。有什么帮助吗?

【问题讨论】:

    标签: forms symfony


    【解决方案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 方法来完成。这很简单。

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      相关资源
      最近更新 更多