【问题标题】:Symfony2: collection form field type with data-prototypeSymfony2:具有数据原型的集合表单字段类型
【发布时间】:2011-12-13 11:58:15
【问题描述】:

我有一个想要添加玩家(玩家对象)的团队。我已经正确设置了表单“类型”类。这是我观点的相关部分:

{% for index, player in form.players %}
    <div id="template" data-prototype="{{ form_widget(form.players.get('prototype')) | e }}">
        <span class="title">{{ index }}</span>
        {{ form_row(player.name) }}
    </div>
{% endfor %}

我的问题是 data-prototype 属性不包含 span 标签;它只包含{{ form_row(player.name) }} 的输出。有没有办法将div#template 的全部内容包含在data-prototype 属性中?

【问题讨论】:

  • 我正在考虑为form.players.get('prototype') 使用不同的表单主题。如果它有效,我会更新帖子。
  • 这将是解决它的方法afaik
  • 您是如何解决这里的问题的?这里更普遍的问题是,如何定制原型?任何人都可以帮忙吗?我还没有找到关于该主题的任何确凿信息。

标签: php symfony


【解决方案1】:

这也困扰着我。我自定义了一个字段类型,甚至用减少的字段集(对于更复杂的对象)制作了简单的表单类型,但感觉不太对劲。我想出了一个可以解决问题的解决方案:)

首先 - 我认为您的 &lt;div id="team" data-prototype="..."&gt; 应该在您的循环之外。

接下来,您的原型只是一个表单视图对象,因此如果您将其传递给模板,您可以手动呈现字段并自定义输出。注意:自动转义对包含的内容没有影响,所以使用“过滤转义”。

<div id="playerFields" data-prototype="{% filter escape %}{% include 'AcmeTeamBundle:Team:prototypePlayer.html.twig' with {'form': form.players.get('prototype')} %}{% endfilter %}">

然后在您的prototypePlayer.html.twig 中,像往常一样在表单视图中渲染每个字段。

<div>
    <span class="title">{{ form_label(form.name) }}</span>
    {{ form_row(form.name) }}
    <span class="age">{{ form_label(form.age) }}</span>
    {{ form_row(form.age) }}
    {# render whatever else you like from your Form/PlayerType class... #}
<div>

我的模板与您的问题有不同的数据结构,但它应该会有所帮助:)

干杯,

克里斯


弃用警告:

从 Symfony 2.1 开始,.get() 已被弃用,上述内容将不起作用。将 form.players.get('prototype') 替换为 form.players.vars.prototype 以在更高版本的 Symfony 中解决此问题。

【讨论】:

  • 完美。正是我需要的。谢谢
  • 我遇到了您的解决方案 lxion,但它似乎在提交数据后呈现表单时不使用原型模板,并且您在下一页上查看相同的表单。
  • @Dean,请记住,“原型”仅用作在客户端添加新集合项的模板。呈现现有集合项是在服务器端完成的,与原型无关。这在验证失败后重新填充时也是有效的。只需使用原型模板渲染所有现有的集合项目,如下所示: {% for player in form.players %} {% include 'AcmeTeamBundle:Team:prototypePlayer.html.twig' with {form: player.vars.form} %} { % endfor %}
  • 我这辈子都无法让它发挥作用。我想我现在已经尝试了所有可能的组合,并尝试了大约 4 个不同的 SO 帖子,但仍然无济于事。如果这对 Symfony2.5 仍然有效?
  • @Doug 尝试将 by_reference 设置为 false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多