Symfony - 覆盖字段选项(required = false to required = true)

时间:2018-01-25 14:35:06

标签: php jquery symfony symfony-forms

我想完成以下任务:

FormType -> If my checkbox is checked, hide a normally required field and make it required = false, so I can submit my Form. 

如果选中我的复选框,我需要覆盖特定的表单字段。实施例...

形式:

$builder->add(
    'checkbox',
    CheckboxType::class,
    [
        'label' => 'checkbox',
        'required' => false,
        'mapped' => false,
        'attr' => [
            'class' => 'checkbox',
        ]
    ]
);

指数:

$('.checkbox').change(function () {
    if ($('.checkbox').is(':checked')) {
        $(".end-date").hide();
    } else {
        $(".end-date").show();
    }
});

我该如何继续?

我试过这样的事情(不知何故它不起作用):

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
            $form = $event->getForm();
            $config = $form->get('what_ever_field')->getConfig();
            $options = $config->getOptions();

            $form->add(
                'what_ever_field',
                get_class($config->getType()->getInnerType()),
                array_replace(
                    $options,
                    [
                        'required' => false,
                    ]
                )
            );
        });

但它没有意义,因为复选框和监听器没有任何关系。

1 个答案:

答案 0 :(得分:2)

我认为在页面上呈现后,通过JS动态更改字段的必需属性会更容易。你到了一半:

JS

$('.checkbox').change(function() {
    if ($('.checkbox').is(':checked')) {
        $(".end-date").removeAttr("required");
        $(".end-date").hide();
    } else {
        $(".end-date").attr("required","required");
        $(".end-date").show();
    }
});

这个JQuery代码可以进行优化,但就是这样。希望它有所帮助。