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

How to define form unique "id" attribute from a controller

我有一个控制器,它创建了几个相同的表单:

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 问题。

谢谢!

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

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

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

您还可以从 twig 设置表单 ID:

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

但我怀疑它能否解决您的问题。

我不明白你为什么不想使用 FormFactory::createNamedBuilder(),因为这是你问题的解决方案。

我比 createForm() 多了一个参数,首先是名称(形式 html 名称属性)。

// From a controller extending \Symfony\Bundle\FrameworkBundle\Controller\Controller
// in Symfony 2.7

$this->get('form.factory')->createNamedBuilder(
    'stuff_form_'.$i, // will print <form name="stuff_form_1" ...
    'StuffType', // type alias
    $infos[$i], // data default to null
    $options // array if needed
);

// in Symfony 2.8+
$this->get('form.factory')->createNamedBuilder(
    'stuff_form_'.$i,
    StuffType::class, // Full qualified name of class (FQCN)
    $infos[$i]
);