表格就像symfony2表格中的数据一样

时间:2013-06-07 13:20:49

标签: symfony symfony-forms tabular

我需要以我的形式提供此类数据:

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

这就是表单的样子:

form design

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

有没有更好的方法来存储此示例中显示的表格数据类型?保留其自己的实体属性中的所有值不是一种选择,因为该表单中将有大量的表数据。

2 个答案:

答案 0 :(得分:3)

您应该创建一个包含x,y和value属性的实体类。

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

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

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

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

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

答案 1 :(得分:0)

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

第1步。

创建用于在单独的twig文件中生成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的元素)。对于serilize我使用了像http://css-tricks.com/snippets/jquery/serialize-form-to-json/这样的东西。序列化值以字符串形式存储在单个实体中,并像这样保存到db。

它如何运作:

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