我尝试了几种解决方案,我认为这是最好的结果:
步骤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 从该实体字段反序列化数据并加载到表格输入字段。在将其发送回(发布)到服务器之前,通过序列化函数收集并放入同一字段中。