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
- 3944 reads