0

我需要在我的表单中有这种类型的数据:

value11, value12, value13 ...
value21, value22, value23
value31, value32, value33 
value41, value42, value43
...

这是表单的外观:

形式设计

是否有任何表单类型可以自动执行此操作,或者必须手动创建表单?有集合类型,但它似乎不适合我的情况。我打算从这个表中序列化数据并将其故事到单个 db 表列(实体类的单个属性)。

有没有更好的方法来存储此示例中提供的表格数据类型?将所有值保留在它们自己的实体属性中不是一种选择,因为这种形式会有大量的表数据。

4

2 回答 2

3

您应该创建一个具有 x 、 y 和 value 属性的实体类。

x & y 是唯一的组合,代表矩阵中的位置。

该实体不必存储在您的数据库中,只能用于生成表单。

然后创建一个表单集合,以这种矩阵形式呈现您的字段。

最后:使用 DataTransformer 根据需要将实体集合转换为数组。

现在将数组保存在数据库中。

于 2013-06-08T04:28:04.297 回答
0

我尝试了几种解决方案,我认为这是最好的结果:

步骤1。

创建用于在单独的树枝文件中生成 tableSheet 的宏(供以后以其他形式使用)。

{# in Default:form.html.twig #}
{% macro tablesheet(name, rows, colums, titles) %}
   ... titles header ...
   {% for i in 1..rows %}
      {% for j in 1..colums %}
   <input name="{{ name }}_{{ i }}{{ j }}" type="text" class="flat-form" />
      {% endfor %}
   {% endfor %}
{% endmacro %}

第2步。

在添加/编辑模板中导入宏并创建输入字段表:

{% import "ProjectSomeBundle:Default:form.html.twig" as forms %}
...
{{ form_widget(form) }}
{{ forms.tablesheet('table1', 4, 3, {0:'col1', 1:'col2', 2:'col3'}) }}
{{ forms.tablesheet('table2', 7, 3, {0:'col1', 1:'col2', 2:'col3'}) }}
...
</form>

步骤 3。

创建 jQuery 函数来序列化/反序列化表单(在这种情况下,输入元素具有平面形式的类 attr)。对于序列化,我使用了类似http://css-tricks.com/snippets/jquery/serialize-form-to-json/的东西。序列化的值以字符串形式存储在单个实体中,并像这样保存到数据库中。

它是如何工作的:

在打开编辑表单时,jQuery 从该实体字段反序列化数据并加载到表格输入字段。在将其发送回(发布)到服务器之前,通过序列化函数收集并放入同一字段中。

于 2013-06-13T13:26:46.903 回答