Этот пост посвящен использованию уже существующих соглашений в шаблоне веточки.
Основываясь на «Как встроить коллекцию форм» из Кулинарной книги Symfony (http://symfony.com/doc/master/cookbook/form/form_collections.html),, вы можете просто ввести любые данные формы html_escaped, которые вы пожелаете, в data-prototype (может считаться хаком, но прекрасно работает) изменятся только страницы, использующие этот шаблон.
В приведенном примере они говорят вам:
<ul class="tags" data-prototype="{{ form_widget(form.tags.vars.prototype)|e }}">
...
</ul>
Это может быть успешно заменено чем-то вроде:
<table class="tags" data-prototype="<tr> <td><div><input type="text" id="task_tags__name__tagId" name="task[tags][__name__][taskId]" disabled="disabled" required="required" size="10" value="" /></div></td> <td><div><input type="text" id="task_tags__name__tagName" name="task[tags[__name__][tagName]" required="required" value="" /></div></td></tr>">
<tr>
<th>Id</th>
<th>Name</th>
</tr>
<tr>
...pre existing data here...
</tr>
</table>
Где атрибут типа данных таблицы с классом «tags» выше - это html-экранированная версия (и разрывы строк удалены, хотя пробелы в порядке и обязательны):
<tr>
<td><div><input type="text" id="task_tags__name__tagId" name="task[tags][__name__][taskId]" disabled="disabled" required="required" size="10" value="" /></div></td>
<td><div><input type="text" id="task_tags__name__tagName" name="task[tags[__name__][tagName]" required="required" value="" /></div></td>
</tr>
... но вы также должны настроить javascript в примере, чтобы добавить tr вместо li:
function addTagForm(collectionHolder, $newLinkTr) {
...
// Display the form in the page in an tr, before the "Add a question" link tr
var $newFormTr = $('<tr></tr>').append(newForm);
...
};
...
// setup an "add a tag" link
var $addTagLink = $('<a href="#" class="add_tag_link">Add a tag</a>');
var $newLinkTr = $('<tr></tr>').append($addTagLink);
...
Для меня следующий шаг - выяснить, как определить прототип во внешнем файле, который я могу как-то вызвать в шаблоне ветки для data-prototype, который динамически работает с формой. Что-то вроде:
<table class="tags" data-prototype="{{somefunction('App\Bundle\Views\Entity\TagsPrototypeInTable')}}">
Так что, если один из других постов описывает это, а я слишком тупой или если кто-то знает, как это сделать, так и скажите!
Существует ссылка на что-то из gitHub из Francois, но я не нашел никакого объяснения, поэтому я думаю, что это, вероятно, более динамичный метод, который я получу в один из этих ближайших дней.
Мир,
Стив
Обновление:
Можно также использовать только части прототипа:
data-prototype="<tr> <td>{{ form_row(form.tags.vars.prototype.tagId) | e }}</td> <td>{{ form_row(form.tags.vars.prototype.tagName) | e }}</td></tr>"
Где атрибут типа данных таблицы с классом «tags» выше - это html-экранированная версия (и разрывы строк удалены, хотя пробелы в порядке и обязательны):
<td>{{ form_row(form.tags.vars.prototype.tagId) | e }}</td>
<td>{{ form_row(form.tags.vars.prototype.tagName) | e }}</td>
(я использовал http://www.htmlescape.net/htmlescape_tool.html.)
Symfony заменит информацию между {{}} на отображаемое поле html_escaped (из-за "| e") при отображении страницы. Таким образом, любая настройка на уровне поля не теряется, но! вы должны вручную добавлять и удалять поля в прототипе, как вы делаете это с сущностью:)