Блокировать контент для data-prototype с CollectionType - PullRequest
0 голосов
/ 08 октября 2018

У меня есть 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...