Twig - 转换数据聚合并使其与数据原型策略兼容

时间:2013-11-25 17:37:42

标签: symfony twig

我正在使用Symfony 2.1框架解决我的项目问题。

我有一个FormType将一个集合传递给相应的twig模板,如下所示:

$builder        
  ->add('myList', 'collection',
    array('type' => new ItemType(),
    'allow_add' => true, 'allow_delete' => false, 'by_reference' => false))

twig模板需要以一种棘手的方式处理集合,以便在组中呈现列表,以便每行包含一对。为了清楚起见,我将方案展开了。因此,在第一阶段,我只创建新数组,其中每个项本身就是一个包含几个后续“原始”项的数组:

{% set nCouples = (edit_form.myList.count/2) - 1 %}
{% set groupedList = [] %}
{% for iCouple in 0..nCouples %}
  {% set i = iCouple*2 %}
  {% set couple = [ edit_form.myList[i], edit_form.myList[i+1] ] %}
  {% set couples = couples|merge([couple]) %}
{% endfor %}

然后我只渲染列表:

<table id="myList">
  {% for couple in couples %}
    <tr>
      {% include 'myBundle:edit_couples.html.twig' with {'couple': couple}  %}
    </tr>
  {% endfor %}
</table>

现在的问题是我需要涉及数据原型,以便我可以使用javascript向集合中添加行,但使用上述策略会创建一个与数据原型不兼容的列表。那是因为通常你应该给出一个具有 prototype 成员的FieldType。这是一个使用上面制作的普通数组的非工作示例:

<table
  id="myList"
  data-prototype="
    {% filter escape %}
    {% include 'myBundle:edit_couples.html.twig'
      with {'form': couples.get('prototype')} %}
    {% endfilter %}
">

不幸的是,在这种情况下,情侣,它只是一个数组而不是FieldType。我想要了解的是,如果有人有任何关于最终将变换应用于数据从特定FormType聚合的方式的更好方法的建议,并且如果它对于twig模板是合法的,以便以更方便的方式为用户界面提供数据观点看法。我不能忽视FormType应该与用户界面耦合。我只是问是否有人可以阐明我最终误导的想法,或许建议一些聪明且完善的策略来完成这种转换。甚至在FormType方面,但没有弄乱实体耦合 - 需要不知道分组策略。

1 个答案:

答案 0 :(得分:0)

最后我只是采用了不同的策略。我现在明白,这个问题可能不够通用,不足以代表一个共同的需求,或者可能没有很好地描述这种情况会产生一些不确定性。关键是这里涉及到几个领域,而对于其他人来说,抽象概念并试图给出解决问题的明确答案可能过于费力。

为了讨论起见,我会尽快报告我的最终决定。我在这里做的只是使用作为数据原型的树枝的输出我需要打印单个项目(这对夫妇的一部分)然后通过javascript组成整个行dinamically结合来自那里(项目的方式)每次用户按下添加按钮时,在行和单元格中显示)。这不是我正在寻找的最佳解决方案,因为我需要重复有关仅在树枝上应该存在的表示的详细信息。特别是我在谈论在js上制作一行时需要复制已经在树枝上宣布的东西的方式。此外,我还被迫在其他地方写作 - 使用属于通用行的隐藏字段信息(如本地化标签),这些信息无法保留在数据原型上,因为它的域只是单个通用项目。

我想知道这个问题或答案是否对任何人都有用..我想它只是为了记录而放在这里。