使用CollectionType阻止数据原型的内容

时间:2018-10-08 14:55:46

标签: symfony twig

我有一个像这样的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处理的嵌入表单集合的 prototype (原型)。https://symfony.com/doc/3.4/form/form_collections.html。我还查阅了官方文档以及此https://github.com/symfony/symfony-docs/issues/6056,它为我提供了块标识符。

我正在使用symfony 3.4

0 个答案:

没有答案