我有一个控制器,它可以创建几个相同的形式:
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' }) }}
但我怀疑它能解决你的问题。