Это меня тоже беспокоило. Я настроил тип поля и даже сделал простые типы форм с уменьшенным набором полей (для более сложных объектов), но он просто не был правильным. Я придумал решение, которое должно сработать :))
Во-первых, я думаю, что ваш <div id="team" data-prototype="...">
должен быть вне вашей петли.
Далее, ваш прототип - это просто объект представления формы, поэтому, если вы передадите его в шаблон, вы сможете отрисовывать поля вручную и настраивать вывод. Примечание: autoescape не влияет на включенный контент, поэтому используйте 'escape-фильтр'.
<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>
Мой шаблон имеет другую структуру данных, но это должно помочь:)
Приветствия
Chris
Предупреждение об устаревании:
Начиная с Symfony 2.1, .get()
устарело, и вышеописанное не будет работать. Замените form.players.get('prototype')
на form.players.vars.prototype
, чтобы исправить это в более поздних версиях Symfony.