Symfony2 не отображает прототип данных формы сбора

Хорошо, это довольно неловкая проблема. Я использую тип формы collection в Symfony, и после того, как я настрою его с помощью

'prototype' => true,
'allow_add' => true

Я ожидаю, что он напечатает прототип, когда я вызову любой из них в шаблоне Twig:

form_rest(form)
form_widget(form.subform.get('prototype'))

Проблема в том, что Symfony печатает этот прототип только, если коллекция содержит хотя бы один элемент.

Это ошибка, о которой я не знаю, или я что-то упускаю?

Любая идея будет принята с благодарностью! Спасибо!


person Jovan Perovic    schedule 26.02.2012    source источник


Ответы (3)


Я обновил Symfony до последней стабильной версии, и прототип все еще ведет себя странно:

  • Если элементов не существует, он будет отображать <div data-prototype="...."></div>
  • В противном случае прототип будет отображаться как чистый HTML (а не как атрибут DIV выше)

Поскольку готового решения не существует, я был вынужден сделать IF-ELSE в своем JS. То есть JS сначала проверяет элемент data-prototype и возвращается к другому, если он не существует.

Как только у меня будет свободное время, я изучу это поведение и, если оно окажется нежелательным (как я подозреваю), сообщу об этом как об ошибке...

person Jovan Perovic    schedule 27.02.2012

Не знаю, баг ли это, но думаю, нет смысла печатать форму для коллекции, если она не содержит хотя бы одного элемента. Если вы создаете коллекцию, вам следует создать фиктивный элемент и добавить его в свою коллекцию. Это не делается автоматически.

person greg0ire    schedule 26.02.2012
comment
Если я хочу создать объект с нуля, я хотел бы иметь возможность создавать все поля с помощью jQuery. Я мог бы вставить фиктивный объект в коллекцию, но мне это кажется чем-то вроде быстрой и грязной игры... - person Jovan Perovic; 26.02.2012
comment
Затем, возможно, установите точку останова в строке 27 CollectionType.php и отладьте... Я только что просмотрел ее и не понимаю, зачем нужен элемент. - person greg0ire; 26.02.2012
comment
Хорошо, кажется, я немного ошибся. В обоих случаях рендерится прототип, просто я не сразу его заметил, но эти 2 прототипа во многом отличаются. Я буду продолжать искать способ рендеринга единого, более согласованного прототипа, который позволил бы мне использовать один JS-код для добавления новых элементов.... - person Jovan Perovic; 26.02.2012
comment
Я добавил ответ, который завершает мои выводы. Может кому поможет с похожей проблемой... - person Jovan Perovic; 27.02.2012

Если данные формы пусты, вы можете создать клон формы и заполнить ее фиктивным объектом. Используйте этот клон для создания прототипа.

person Alexey Kosov    schedule 17.05.2016