如何从控制器定义表单唯一“id”属性

时间:2016-02-22 17:32:03

标签: php symfony twig symfony-forms

我有一个控制器,可以创建几个相同的形式:

for ($i = 0; $i < 10; $i++) {
   $infos[$i] = new Stuff();
   $forms[$i] = $this->createForm('StuffType', $infos[$i]);
   $forms[$i]->handleRequest($request);
}

问题是10个表单使用相同的ID。我正在寻找一种方法来指定每个表单的ID。我不想使用$this->get('form.factory')->createNamedBuilder方法,因为我想使用我的(自定义和可重用)StuffType表单构建器。

除非我不理解,否则我不能使用twig attr调整,因为我希望能够保留我的表单:

for ($i = 0; $i < 10; $i++) {
   $em->persist($infos[$i]);
}

某些Twig ID修改会指定一个ID,但我无法按照当前的方式持久保存对象。或者我错了吗?

目前,此代码会运行但会将同一对象保留10次。这就是我认为这是ID问题的原因。

谢谢!

2 个答案:

答案 0 :(得分:1)

本教程将介绍如何正确嵌入表单集合:

http://symfony.com/doc/current/cookbook/form/form_collections.html

您可以忽略有关Prototype的部分,因为您不需要动态创建新表单。

您还可以在twig中设置表单ID:

{{ form_widget(form, {'id':'yourid' }) }} 

但我怀疑这会解决你的问题。

答案 1 :(得分:1)

我不明白为什么你不想使用 <TypeInstantiation Name="System.Collections.Generic.List" Arguments="System.Nullable" Dynamic="Required Public" > <TypeInstantiation Name="System.Nullable" Arguments="System.Int32" Dynamic="Required Public" /> </TypeInstantiation> ,因为这是解决问题的方法。

我首先采用的是FormFactory::createNamedBuilder()以外的一个参数,它正是名称(表单html名称属性)。

createForm()