Symfony 4: формы не отображают поля ввода при использовании CollectionType - PullRequest
1 голос
/ 04 июля 2019

У меня проблема с отображением формы при использовании CollectionType. Он не показывает входные данные ClientType, просто помечает «имя».

Что не так? Я не понимаю ..

SubscriptionType:

class SubscriptionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder

         ->add('name', CollectionType::class, array(
             'entry_type' => ClientType::class,
             'allow_add' => true,
             'prototype' => true,
         ))

            ->add('enabled', null, array(
                'label'    => 'Activer le contrat de support'), [
                'required'   => false,
            ])
            ->add('startDate', DateTimePickerType::class, [
                'label' => 'Date de début de la formation',
                'help' => 'La formation peut être programmée en sélectionnant une date future',
            ])
            ->add('endDate', DateTimePickerType::class, [
                'label' => 'Date de fin de la formation',
                'help' => 'Sélectionnez la date de fin de la formation',
            ]);
    }


    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Subscription::class,
            'name' => null
        ]);
    }
}

ClientType:

class ClientType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder

        ->add('name', EntityType::class, [
            'class' => Clients::class,
            'label'    => 'Domaine du client',
        ])

        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Clients::class,
            'name' => null
        ]);
    }
}

И в моем шаблоне Twig у меня есть:

{% block body %}

    <h1>{{ 'Ajout d\'un client' }}</h1>

    {{ form_start(form) }}
    {{ form_row(form.name) }}
    <ul id="name-fields-list"
        data-prototype="{{ form_widget(form.name.vars.prototype)|e }}"
        data-widget-tags="{{ '<li></li>'|e }}"
        data-widget-counter="{{ form.children|length }}">
        {% for nameField in form.name %}
            <li>
                {{ form_errors(nameField) }}
                {{ form_widget(nameField) }}
            </li>
        {% endfor %}
    </ul>

    <button type="button"
            class="add-another-collection-widget"
            data-list-selector="#email-fields-list">Add another customer</button>

    {{ form_row(form.enabled) }}
    {{ form_row(form.startDate) }}
    {{ form_row(form.endDate) }}

    <script src="{{ asset('build/js/add-collection-widget.js') }}"></script>

    <button type="submit" class="btn btn-primary">
        <i class="fa fa-save" aria-hidden="true"></i> {{ 'Ajout d\'un client' }}
    </button>
    <a href="{{ path('support_admin_client_index') }}" class="btn btn-link">
        <i class="fa fa-list-alt" aria-hidden="true"></i> {{ 'Retour à la liste des clients' }}
    </a>
    {{ form_end(form) }}


{% endblock %}


{% block javascripts %}
    <script src="{{ asset('build/js/add-collection-widget.js')  }}"></script>
{% endblock %}

У меня активирована опция «prototype», потому что у меня есть «allow_add», а в моей ветке - data-prototype="{{ form_widget(form.name.vars.prototype)|e }}"

Как заставить все поля ввода показывать?

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