Bonjour,
Je rencontre un problème lors d'un création d'une page qui contient deux formulaires

  • un formulaire de recherche 1
  • un formulaire de modification 2 qui s'affiche selon les données mise dans le formulaire de recherche 1

Ce que je fais

voici mon controleur .

public function showCellsValidation(Request $request,ManageActionService $actionService,ManagementCelluleService $celluleService){
    $em = $this->getDoctrine()->getManager();

    $form_recherche = $this->createForm(PlaqueCloneCellulaireSearch::class,null,['screen'=>'Cells validation']);
    //soumission du formulaire de recherche
    $form_recherche->handleRequest($request);
    $parameters = null;

    if($form_recherche->isSubmitted() && $form_recherche->isValid()) {
        //recuperation parameteres du form
        $parameters['plaque'] = $form_recherche->get('plaque')->getData();
        foreach ($parameters['plaque'] as $plaque) {
            $plaques[] = $plaque->getId();
            $echantillons = $em->getRepository(EchantillonEmplacement::class)->findCellsCaracterisationInProgress('Cellular clone', null, true);
        }
    }

    $form = $this->createForm(CellsEchantillonEmplacementListViewType::class, $echantillons, ['echantillons' => $echantillons,'user'=>$this->getUser(),'screen'=>'Cells validation']);

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $collection = $request->get('CellsEchantillonEmplacementViewType');
        $echantillons = $form->get('echantillons')->getData();

        if ($form->getClickedButton() && 'gelatin' === $form->getClickedButton()->getName()) {

            ///traitement
            return $this->redirectToRoute('cells_validation');

        } elseif ($form->getClickedButton() && 'save' === $form->getClickedButton()->getName()) {
            // traitement

            return $this->redirectToRoute('cells_validation');

        }
    }
    return $this->render('clone_cellulaire/cells_validation.html.twig',[
        'form_recherche'=>$form_recherche->createView(),
        'form' => $form->createView(),
        'actions' => $echantillons
    ]);

Mon form CellsEchantillonEmplacementListViewType, Collection de formulaire mappé a une entité

class CellsEchantillonEmplacementListViewType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $echantillons = $options['echantillons'];
        $user = $options['user'];
        $screen = $options['screen'];
            $builder->add('select',CheckboxType::class,array(
                'required'=>false,
                'label'=>false,
                'mapped'=>false,
                'attr' =>  ['class' => 'select_item'],

            ));
            $builder->add('gelatin',SubmitType::class,array(
                'label'=>'Gelatin',
                'attr'=>[
                    'class'=>'btn btn-info',
                ],
            ))

                ->add('save',SubmitType::class,array(
                    'label'=>'Save',
                    'attr'=>[
                        'class'=>'btn btn-info',
                    ]
                ));
        if($screen !="Cells validation"){
            $builder->add('flag_for_bm',SubmitType::class,array(
                'label'=>'Flag/unflag for BM',
                'attr'=>[
                    'class'=>'btn btn-info',
                ],
            ))
                ->add('print_label',SubmitType::class,array(
                    'label'=>'Print label',
                    'attr'=>[
                        'class'=>'btn btn-info',
                    ],
                ))

                ->add('trash',SubmitType::class,array(
                    'label'=>'Trash',
                    'attr'=>[
                        'class'=>'btn btn-info',
                    ],
                ));
        }

        if($echantillons!=null){

            if($user!=null){
                $builder->add('echantillons',CollectionType::class,array(
                    'entry_type'=>CellActionGenotypingViewType::class,
                    'entry_options'=>['user'=> $user,'screen'=>$screen],
                    'data' => $echantillons
                ));
            }else{
                $builder->add('echantillons',CollectionType::class,array(
                    'entry_type'=>CellActionGenotypingViewType::class,
                    'entry_options'=>['screen'=>$screen],
                    'data' => $echantillons,

                ));
            }

        }else{
            $builder->add('echantillons',CollectionType::class,array(
                'entry_type'=>CellActionGenotypingViewType::class,
            ));
        }
    }

    /**
     * Returns whether this element was clicked.
     *
     * @return bool Whether this element was clicked
     */
    public function isClicked()
    {
        // TODO: Implement isClicked() method.
    }
    public function getBlockPrefix()
    {
        return 'CellsEchantillonEmplacementViewType';
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(

            ['data_class'=>null,
                'failure'=>null,
                'echantillons'=>null,
                'screen'=>null,
                'user'=>null]);
    }

}

Mon template cells_validation.html.twig


{% block content %}

    {% if form_recherche is defined %}
        {{ form_start(form_recherche) }}
        <div class="row">
            <div class="col-md-3"> {{ form_widget(form_recherche.projet) }}</div>
            <div class="col-md-3"> {{ form_widget(form_recherche.plaque) }}</div>
            <div class="col-md-2"> {{ form_widget(form_recherche.to_analyze) }}</div>
            <div class="col-md-4"> {{ form_widget(form_recherche.submit) }}</div>
        </div>

        {{ form_end(form_recherche) }}

    {% endif %}
    {% if form is defined %}

        {{ form_start(form) }}

        <div class="row">
            <div class="col-md-12 col-lg-12 show_buttons_scrollx"></div>
        </div>
        <div class="row">
            <div class="col-md-12 col-lg-12 table-responsive">
                <table class="table table-striped table-hover table_index_scrollx">
                    <thead>
                        <tr>
                            <th ></th>
                            <th >Project(s)</th>
                            <th >Clone</th>
                            <th >Arrival date</th>

                            <th >Comment(s)</th>
                            <th >NGS Progress</th>
                            <th >Genotyping Status</th>
                            <th >Embryology Status</th>
                            <th >{{ form_row(form.select) }}</th>
                        </tr>

                    </thead>
                    <tbody>

                        {% for child in form.echantillons %}
                            {% set index = child.vars.name %}
                            {% set cell = actions[index].CloneCellulaire %}

                            <tr >

                                <td></td>
                                {#nom du/des projets#}
                                <td>{{ projet.projet.CodeLabo }}</td>

                                {#numero du clone#}
                                <td>{{ cell.numero }}</td>

                                {#date d arrivage#}
                                <td>{{ actions[index].dateArrivage ? actions[index].dateArrivage|date('Y-m-d') : '' }}
                                    {{ actions[index].dateArrivage ? 'W'~ actions[index].dateArrivage|date('W') : '' }}</td>

                                {# commentaire#}
                                <td> {{ form_widget(child.commentaire) }}</td>
                                <td>{{ action_seq.progression  ~'%' }} </td>
                                {# statut clone genotypage#}
                                <td>{{ form_widget(child.genotypage_statut) }}</td>
                                {# status clone embryo#}
                                <td>{% if cell.CloneCellulaireStatutEmbryo %}{{ cell.CloneCellulaireStatutEmbryo.nom }}{% endif %}</td>
                                <td>{{ form_widget(child.choose) }}</td>

                            </tr>
                        {% endfor %}
                    </tbody>

                    <tfoot>
                        <tr>
                            <th ></th>
                            <th >Project(s)</th>
                            <th >Clone</th>
                            <th >Arrival date</th>
                            <th >Comment(s)</th>
                            <th >NGS Progress</th>
                            <th >Genotyping Status</th>
                            <th >Embryology Status</th>
                            <th ></th>
                        </tr>

                    </tfoot>
                </table>
            </div>
        </div>

        <div class="row text-center">
            <div class="col-md-12 "> {{ form_widget(form.save) }} {{ form_widget(form.gelatin) }}</div>

        </div>

        {{ form_end(form) }}
    {% endif %}
{% endblock %}

Ce que je veux

Je voudrais pourvoir afficher le formulaire de recherche dans mon template, recuperer ces données,
afficher le formulaire de moficatications avec le données echantillons trouvés et modifier le echantillons
selectionnées tout ce ci sur la même page sans JS ou ajax. C'est assez facile a faire en php pure ,mais avec symfony il me
manque une étape je pense.

Ce que j'obtiens

Le formulaire de recherche fait le taffe, j'affiche bien le fomulaire de modification avec les echnatillons trouvés mais quand je sauvegarde pour traiter la modification des echantillons , j'ai l'erreur :
This form should not contain extra fields.

Merci par avance premier post, premier post en markdown

Aucune réponse