У меня есть MeetingType, подобный этому (я упростила его, чтобы его было легче понять)
class MeetingType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'label' => 'Nom',
])
->add('agendas', CollectionType::class,
[
'entry_type' => AgendaType::class,
'entry_options' => array('label' => false),
'allow_add' => true,
'by_reference' => false,
'allow_delete' => true,
'label' => false,
])
->add('save', SubmitType::class, array(
'label' => 'Sauvegarder',
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Meeting::class,
));
}
}
И AgendaType, подобный этому
class AgendaType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('orderNumber', IntegerType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Agenda::class,
));
}
}
Моя повестка дня встроена в мое собраниеформа
Моя форма выглядит так
<div class="form-row">
<div class="form-group col-md-4">
{{ form_label(form.name) }}
{{ form_widget(form.name, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
{% form_theme form _self %}
{% block _meeting_agendas_entry_name_label %}
name-label
{% endblock %}
{% block _meeting_agendas_entry_name_widget %}
name-widget
{% endblock %}
{% block _meeting_agendas_entry_widget %}
{{ form_widget(form.name) }}
{% endblock %}
{% block _meeting_agendas_entry_label %}
{{ form_label(form.name) }}
{% endblock %}
{# form_widget(form.agendas) #}
<ul class="agendas no-bullets" data-prototype="{{ form_widget(form.agendas.vars.prototype)|e('html_attr') }}">
{% for agenda in form.agendas %}
<li>
{{ form_widget(agenda.name) }}
{{ form_widget(agenda.orderNumber) }}
</li>
{% endfor %}
</ul>
Как я играл с этими элементами
{% block _meeting_agendas_entry_name_label %}
something
{% endblock %}
{% block _meeting_agendas_entry_name_widget %}
something
{% endblock %}
{% block _meeting_agendas_entry_widget %}
something
{% endblock %}
{% block _meeting_agendas_entry_label %}
something
{% endblock %}
Чтобы получить конкретный результат
<ul>
<li>
<div class="style-1">
<div class="style-2">
Label of agenda.name
Widget of agenda.name
</div>
<div class="style-2">
Label of agenda.orderNumber
Widget of agenda.orderNumber
</div>
</div>
</li>
<li>
<div class="style-1">
<div class="style-2">
Label of agenda.name
Widget of agenda.name
</div>
<div class="style-2">
Label of agenda.orderNumber
Widget of agenda.orderNumber
</div>
</div>
</li>
</ul>
Я пробовал много вещей, но так и не смог добиться правильного результата.Мне нужно изменить этот прототип для встраивания коллекций форм, который обрабатывается JavaScript. (https://symfony.com/doc/3.4/form/form_collections.html). Я также консультировался с официальным документом и этим https://github.com/symfony/symfony-docs/issues/6056, который помог мне сидентификаторы блоков.
Я работаю с Symfony 3.4