如何从控制器定义表单唯一的“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表单生成器。

除非我不太理解,否则我也不能使用树枝attr调整,因为我希望能够持久化我的表单:

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

一些 Twig ID 修改将指定一个 ID,但我将无法像目前那样持久化对象。还是我错了?

目前,此代码运行,但保留同一对象 10 次。这就是为什么我认为这是一个ID问题。

谢谢!

我不明白你为什么不想使用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]
);

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

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

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

您还可以从树枝设置表单 ID:

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

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