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

标签 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,
                    ]
                )
            );
        });

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

最佳答案

我认为在页面渲染后通过 JS 动态更改字段的 required 属性会容易得多。你已经成功了一半:

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 代码可以优化,但仅此而已。希望对您有所帮助。

关于php - Symfony - 覆盖字段选项(required = false 到 required = true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445366/

相关文章:

php - 刷新 token Google OAuth 2.0 PHP

javascript - jquery仅添加一次span元素

javascript - 用于移动设备的 Html 导航栏菜单

php - ApiPlatform - 规范化后将 DTO 的字段传递给不同的服务

php - PDF X-1a :2001 format in PHP

php - 同一页面上有两个ajax,但第二个没有得到第一个已更改的内容

php - 使用 PHP 和 jQuery 预览数据库中保存的图像

javascript - jquery - 需要一个比 .change 更好的事件来触发验证逻辑

php - 在 Symfony2 assetic 中加载 JS 文件的顺序

symfony - Symfony + Doctrine提供的特定于环境的数据固定装置