我需要以我的形式提供此类数据:
value11, value12, value13 ...
value21, value22, value23
value31, value32, value33
value41, value42, value43
...
这就是表单的样子:
是否有任何表格类型可以自动执行此操作或必须手动创建表单?有收集类型,但它似乎不适合我的情况。我计划将此表格中的数据序列化并将其故事转换为单个db表列(实体类的单个属性)。
有没有更好的方法来存储此示例中显示的表格数据类型?保留其自己的实体属性中的所有值不是一种选择,因为该表单中将有大量的表数据。
答案 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)之前,将服务器值收集并通过序列化函数放入同一字段中。