【问题标题】:Save multiple instances of one entity with form submit in symfony2在 symfony2 中使用表单提交保存一个实体的多个实例
【发布时间】:2014-02-28 23:04:11
【问题描述】:

现在我正在渲染两种形式(一种用于公司,一种用于标签),它看起来像这样:

<h3>Company</h3>
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.city) }}
{{ form_row(form.street) }}
{{ form_row(form.postalcode) }}
{{ form_row(form.buildingnumber) }}
{{ form_row(form.vatid) }}
{{ form_row(form.tags) }} 
 <button id="test">Test</button>
{{ form_row(tags_form.title) }} 
{{ form_row(form.save) }}
{{ form_end(form) }}

我希望用户能够添加另一个输入(单击测试按钮后){{ form_row(form.tags) }},以便他们可以在一个表单中添加多个标签,但现在我的标签表单如下所示:

    $builder
        ->add('title',null,array(
            'label' => 'tag.title',
            'required' => false
        ));

我真的不知道如何设置它。我尝试了最简单的解决方案:

$('#test').on('click',function(e) {
        e.preventDefault();
        $('#fourcreate_portalbundle_companytags_title').clone().appendTo('form');
});

但是这样提交表单只能从第二个输入创建实体。

编辑:我忘了添加 - 它必须使用两个表单来完成,因为第一个表单包含当前可用标签的列表,第二个表单是让用户添加他们自己的。

【问题讨论】:

    标签: php jquery forms symfony


    【解决方案1】:

    您不应使用两种形式,而应在form.tags 中拥有tags_form 的集合。 sample in the Cookbook 是关于添加标签的。

    【讨论】:

    • 啊,我忘记添加了 - 它必须有两个表单,因为第一个表单包含当前可用标签的列表,第二个表单是让用户添加自己的标签。
    • 来吧,你真的应该阅读我提供的链接。它不仅教授有关表单的方便(而且非常不直观)的东西,而且还有“允许带有“原型”的“新”标签”段落,这正是您想要的。在这本食谱的最后,您将知道如何创建一个类似于 SO 上用于标记的控件:您键入,然后从列表中选择,或者将您键入的内容添加为新项目,然后继续键入/选择下一个。
    • 是的,好的,我可以允许用户添加和删除这些标签,但我无法将添加/删除与从现有标签中进行选择结合起来。
    • “我无法合并”——这是指什么? A)是否对 UI 施加了规范限制,因此您不允许这样做,或 B)您的后端中是否已经有一些代码阻止您实现此功能或 C)您已找到文档怎么做,但它仍然不起作用。在任何情况下,我们都需要有关您当前代码的更多信息才能提供帮助。
    【解决方案2】:

    浏览器发送一个“clobbered”表单,其中两个或多个输入元素的两个或多个 name 属性具有相同的值。因此,后端仅获得最后一个值。我不能更具体,因为我不熟悉 Symfony 的那部分。

    如果您希望克隆输入元素并正确提交它们的值,您必须在提交表单之前至少修改名称属性。此外,请注意非唯一的 id 属性,因为这违反了 HTML (DOM?) 标准。

    例如

    var clone = $('input[id="original"]').clone();
    clone.attr('name', clone.attr('name') + '1');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多