symfony 3 Вложенные формы 2/3 уровня -- как получить прототип -- Как во вложенную коллекцию вложить ещё одну
Primary tabs
В конструкторе формы родителя надо указать .что вы хотите получить и универсальный конструктор для потомка (например родитель Tags уже вложенная коллекция, а в неё мы хотим вложить Methods):
use AppBundle\Entity\Tag; namespace AppBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\CollectionType; class TagType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name'); $builder->add('methods', CollectionType::class, array( 'entry_type' => MethodType::class, 'allow_add' => true, 'by_reference' => false, 'allow_delete' => true, 'prototype' => true, // это важно 'prototype_name' => '__opt_prot__' // это строка для замены на ID в HTML )); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => Tag::class, )); } }
-- это описание формы для TAGS, куда можно вкладывать Methods (другие сущности) получить универсальный прототип для методов (с двумя плэйсхолдерами) теперь можно так:
{{ form_start(form) }} {# render the task's only field: description #} {{ form_row(form.description) }} <h3>Tags</h3> {{ dump(form) }} <ul class="tags" data-prototypeee="{{ form_widget(form.tags.vars.prototype.methods.vars.prototype)|e('html_attr') }} data-prototype="{{ form_widget(form.tags.vars.prototype)|e('html_attr') }}"> {# iterate over each existing tag and render its only field: name #} {% for tag in form.tags %} <li class="tag">{{ form_row(tag.name) }} <ul class="methods" data-prototype="{{ form_widget(tag.methods.vars.prototype)|e('html_attr') }}" > {% for method in tag.methods %} <li class="methods"> {{ form_row(method.name) }} </li> {% endfor %} </ul> </li> {% endfor %} </ul> {{ form_end(form) }}
А именно строкой:
form.tags.vars.prototype.methods.vars.prototype
Почитать ещё:
- Log in to post comments
- 3421 reads