3

我有一个作为 html 表的项目列表。我想有机会以批处理模式保存一些数据。为此,我需要我的表单字段名称如下所示:provider[i][title]等。但是当我尝试创建表单字段时,出现错误:

表单类型名称 ("provider[0]") 无效。名称只能包含字母、数字和“_”。

我对表单集合感到不满,但这并不完全是我需要的。

我想像 $request->request->get('provider') 一样获得整个表单,然后迭代以获取实际数据。我很困惑!这是我能想象到的最简单的任务。

<input type='text' name='provider[0][title]'>
<input type='text' name='provider[1][title]'>
<input type='text' name='provider[2][title]'>

我可以使用 $request->request->all(),这是一个解决方案,但我认为不是那么优雅。有任何想法吗?

4

1 回答 1

1

这是完全正常的,您不能直接用“provider[0]”之类的名称命名您的字段。这部分字段名由 Symfony 生成。

对我来说,以一种形式存储多个实体的唯一(好的)方法是使用集合。它们在 Symfony2 的文档中得到了很好的解释:http: //symfony.com/doc/current/cookbook/form/form_collections.html

在您的情况下,您只需要创建一个包含一个集合字段的表单,并在控制器中添加行或使用 javascript 在飞行中添加行。对于“提供者”字段,只需创建一个带有一个文本字段的 formType。

如果您使用 html 数组,您可以简单地为每个实体添加一行。provider[i] 中的 i 将与数据库中的实体绑定,如果它们没有链接到其他实体。

最后,使用 POST 数据绝对不是一个好的解决方案:您将失去表单字段断言和 CSRF 保护。

于 2013-06-16T22:04:33.033 回答