Symfony2:具有数据原型的集合表单字段类型

时间:2011-12-13 11:58:16

标签: php symfony

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

{% 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的全部内容?

1 个答案:

答案 0 :(得分:32)

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

首先 - 我认为你的<div id="team" data-prototype="...">应该在你的循环之外。

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

<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中修复此问题。