Symfony2如何为深集合表单嵌套

时间:2016-04-05 19:47:38

标签: forms symfony

我有一些更复杂的问题,我从来没有在一个表单中完成超过1个嵌套表单,只需包含一个自定义集合小部件模板就可以了。 (原因:我需要根据laravel和Spaghetti代码对网站进行重新编码,Spaghetti结构有大量的bug和bug补丁,我现在修复了一年,我决定在我喜爱的Symfony上重新创建这个应用程序)

让我写下结构:

Questionnaire (short name QN for later use)
- QN -
      |_ QN Sections -
                      |_ QN Parts -
                                   |_ QN Groups -
                                                 |_ QN Questions -
                                                                 |_ some predefined answers

正如你可以看到每个QN可以有章节,这些部分可以有部分,这些部分可以有组,这些组可以有问题,这些问题有一些条件字段,如问题类型是“A,B,C”它有另一个嵌套的集合形式,用于这些预定义的答案,...

问题是,对于每个这些集合表单,我需要以某种方式指定自定义集合wiget模板,因为每个集合表单都有不同的字段布局,它们的显示和处理方式。

目前我已经创建了一个集合小部件模板,我在QN Sections之前包含了样式QN Sections,但是这个模板也用于他的子集合表单,我需要避免。

在一个完美的世界中它应该像“prototype_template”=> “some path”,然后为每个tempalte创建javascript以添加,删除等。

这是一个屏幕截图,其中包含一些现在的信息: enter image description here

在最后阶段,为每个集合表单使用这些单独的模板,“表单构建器”应该看起来像实际的Web应用程序。 enter image description here

如果您需要更多信息,请告诉我,我会提供尽可能多的信息。

回顾一下:我需要以某种方式为每个嵌套的集合表单类型指定使用不同的集合表单小部件模板。

谢谢

1 个答案:

答案 0 :(得分:0)

Finnaly我明白了。

我使用的主要集合模板是collection_widget块。 这很糟糕,因为它太笼统了。我已将其重命名为_questionnaire_questionnaireSections_widget,因此1.级别的集合是主题。但经过一天的抢劫,1000个表单名称的组合我已经得到了如何命名2. level集合,它的块名称是“_questionnaire_questionnaireSections_entry_questionnaireParts_widget”,它只代表“_mainFormTypeName_fieldNameOfFirstCLevelCollection_entry_FieldNameOfSecondLevelCollection_widget”

我只需要在适当的时候将每个模板文件放到正确的位置。

edit.html.twig
{{ form_start(form) }}
   {% form_theme form "::templates/collection/questionnaire/questionnaireSection.html.twig" %}
   .........
   {{ form_widget(form.questionnaireSections) }}


questionnaireSection.html.twig
{% block _questionnaire_questionnaireSections_widget %}
  .............
  {% for rows in form %}
  {% form_theme form "::templates/collection/questionnaire/questionnairePart.html.twig" %}


questionnairePart.html.twig
{% block _questionnaire_questionnaireSections_entry_questionnaireParts_widget %}

所以问题解决了,我已成功主题嵌套集合。感谢我和symfony文档,它们有0个单词的文档来嵌套形式主题,但它们有一些关于“条目”部分的信息。