现在我正在渲染两个表单(一个用于公司,一个用于它的标签),它看起来像这样:
<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');
});
但这样提交表单只能从第二个输入创建实体。
编辑:我忘了添加 - 它必须用两种形式完成,因为第一种形式包含当前可用标签的列表,第二种形式是让用户添加自己的标签。答案 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');