【问题标题】:symfony2 - How to create a form field of type "entity" without valuessymfony2 - 如何创建没有值的“实体”类型的表单字段
【发布时间】:2023-04-09 06:45:01
【问题描述】:

我有一个带有EntityType 字段的表单。从中获取值的表已经增长,并且呈现的选择框使页面变大(=加载缓慢)。

我替换了这个:

        ->add(
            'contact',
            'entity',
            array(
                'class' => 'CRMCoreBundle:Contact',
                'required' => false,
                'empty_data' => null,
            )
        )

与:

          ->add(
            'contact',
            'entity',
            array(
                'class' => 'CRMCoreBundle:Contact',
                'choices' => array(),
                'required' => false,
                'empty_data' => null,
            )
        )

渲染一个空的选择框,在前端我使用 AJAX 来填充和自动完成选择框。

问题是现在当我提交表单时,它是无效的。有什么想法吗?

【问题讨论】:

    标签: ajax forms symfony


    【解决方案1】:

    它没有通过验证,因为您提交的值不是在创建表单时由表单组件添加的。这是为了防止表单接受未经授权的值。

    正确的做法是让您的 ajax 请求表单使用表单事件更新后端的选择字段,然后使用适当的值更新显示的选择。

    更多关于表单事件的信息 - http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

    【讨论】:

    • 感谢您的回复。我已经读过了,那里描述的用例都不适合我(我猜第三个是最接近的)。
    • 另外,我怀疑他们最近没有测试它。在他们的示例中,他们在 POST_SUBMIT 事件处理程序中向表单添加了一个字段。但是当您尝试这样做时会引发异常:“您无法将子项添加到提交的表单 500 内部服务器错误 - AlreadySubmittedException”
    • 当您将POST_SUBMIT 事件监听器添加到字段而不是整个表单时,它会起作用。
    • 另外,看看这里 - showmethecode.es/php/symfony/symfony2-4-dependent-forms 。有关动态表单的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多