Ребенок в анкете не представлен - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть форма с полем коллекции. Когда я отправляю родительскую форму, дети, добавленные в поле коллекции, не отправляются

Вот что говорит Профилировщик:

enter image description here

Вкладка «Запрос / ответ»:

enter image description here

Я добавил ребенка в коллекцию Крено, но, как вы можете видеть, в Крено нет ни одного ребенка. У меня нет ошибок в отправленной форме.

Я не могу найти, где я ошибаюсь.

Родительская форма:

class MiseEnLigneFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('nom', TextType::class, ['label' => 'Titre'])

                ->add('tempsEpreuve', TimeType::class,
                                              ['label' => 'Durée',
                                                    'label_attr' => ['class' => 'active'],
                                                    'required' => true,
                                                    'widget' => 'single_text'])

                ->add('creneaux', CollectionType::class,
                                                ['label' => false,
                                                      'label_attr' => ['class' => 'active'],
                                                      'entry_type' => CreneauFormType::class,
                                                      'allow_add' => true,
                                                      'allow_delete' => true,
                                                      'by_reference' => false
                ])
            ->add('polycopies', CollectionType::class,
                ['label' => false,
                    'label_attr' => ['class' => 'active'],
                    'entry_type' => PolycopieFormType::class,
                    'allow_add' => true,
                    'allow_delete' => true,
                    'by_reference' => false
                ]);
    }

Детская форма:

class CreneauFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('dateDebut', DateTimeType::class, ['label' =>'Début',
                                                     'label_attr' => ['class'=>'active'],
                                                     'format' => 'dd-MM-yyyy HH:mm',
                                                     'widget' => 'single_text',
                                                     'attr' => ['data-field'=>'datetime']])

                ->add('dateFin', DateTimeType::class, ['label' => 'Fin',
                                                   'label_attr' => ['class'=>'active'],
                                                   'format' => 'dd-MM-yyyy HH:mm',
                                                   'widget' => 'single_text',
                                                   'attr' => ['data-field'=>'datetime']])

                ->add('test', CheckboxType::class, ['label' => false, 'required' => false]);
    }

Контроллер:

$originalCreneaux = new ArrayCollection();
foreach ($colle->getCreneaux() as $creneau) {
    $originalCreneaux->add($creneau);
}  

$form = $this->createForm(MiseEnLigneFormType::class, $colle);
$form->handleRequest($request);

if ($form->isSubmitted()) {
        if ($form->isValid()) {
            return $this->render('Creneau/edit.html.twig', ['form'    => $form->createView(),
                                                'colle' => $colle,
                                                'matiereName' => $matiereName]);

        }
    }

Веточка:

{{ form_start(form) }}
    <div class="card card-content">
       {{ form_widget(form.nom) }}
       {{ form_label(form.nom) }}
       {{ form_widget(form.tempsEpreuve) }}
       {{ form_label(form.tempsEpreuve) }}
    </div>

    <div class="card card-content">
        <table class="polycopies centered"
                   data-prototype="{{ form_widget(form.polycopies.vars.prototype)|e }}">

           <thead>
              <tr>
                <th>Nom</th>
                <th>Supprimer</th>
              </tr>
           </thead>

           <tbody class="poly_body">
              {% for poly in form.polycopies %}
                 <tr>
                   <td>
                       {{ form_widget(poly.nom) }}
                       {{ form_label(poly.nom) }}
                   </td>
                   <td>
                       <a href="" class="delete_poly_link">
                          <i class="material-icons">delete</i>
                       </a>
                   </td>
                </tr>
             {% endfor %}
           </tbody>
        </table>
        <div class="" id="liensAjouterPolycopies">
           <a href="" class="add_poly_link btn-flat" data-tooltip="Ajouter un polycopié">
             <i class="material-icons">add</i>Ajouter un polycopié
           </a>
    </div>

<div class="card card-content">
    <span class="card-title">Créneaux</span>

    <table class="creneaux centered"
           data-prototype="{{ form_widget(form.creneaux.vars.prototype)|e }}">

        <thead>
        <tr>
            <th>Date de début</th>
            <th>Date de fin</th>
            <th>Test</th>
            <th>Supprimer</th>
        </tr>
        </thead>

        <tbody class="creneau_body">
        {% for creneau in form.creneaux %}
            <tr>
                <td class="center-align">
                    {{ form_widget(creneau.dateDebut) }}
                    {{ form_label(creneau.dateDebut) }}
                </td>
                <td class="center-align">
                    {{ form_widget(creneau.dateFin) }}
                    {{ form_label(creneau.dateFin) }}
                </td>
                <td class="center-align">
                    {{ form_widget(creneau.test) }}
                    {{ form_label(creneau.test) }}
                </td>
                <td class="center-align">
                    <a href="" class="delete_creneau_link">
                        <i class="material-icons">delete</i>
                    </a>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    {{ form_rest(form) }}
</div>
<button class="btn-large fullwidth" type="submit" value="Sauvegarder">
    <i class="material-icons left">save</i>
        Enregistrer
</button>
{{ form_end(form) }}

<script>
    var collectionHolder = $('table.creneaux');
    var num = $('.creneau_body').children().length + 1;

    jQuery(document).ready(function () {

    $(document).on("click", "a.add_creneau_link", function (e) {
        e.preventDefault();

        addCreneauForm(collectionHolder);
        return false;
    });

    $(document).on("click","a.delete_creneau_link", function () {
        var $this = $(this);

        $this.closest('tr').remove();

        return false;
    });

    function addCreneauForm(collectionHolder) {

        var prototype = collectionHolder.attr('data-prototype');
        var newForm = prototype.replace(/__name__/g, num);
        num += 1;

        $tableau = newForm.split("<div>");
        var form = '';
        for (var i = 1; i < $tableau.length; i++) {
            form += "<td class='center-align'>" + $tableau[i] + "</td>";
        }
        form += "<td class='center-align'><a href='' class='delete_creneau_link'><i class='material-icons'>delete</i></a></td>";

        var $form = $('<tr></tr>').append(form);
        $form.insertAfter('.creneaux tr:last');
    }
</script>

1 Ответ

0 голосов
/ 17 сентября 2018

После отправки события нет ни сохранения, ни сброса $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($creneau); $entityManager->flush(); Вы случайно забыли?

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