使用symfony2中的表单提交保存一个实体的多个实例

时间:2014-02-28 23:04:11

标签: php jquery forms symfony

现在我正在渲染两个表单(一个用于公司,一个用于它的标签),它看起来像这样:

<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');
});

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

e.g

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