Formulaire dynamique "net::ERR_CONNECTION_RESET"

Par Robin0611, il y a 9 ans


Bonjour bonjour,

Voila je rencontre un petit problème avec mon code Symfony.

J'ai un formulaire avec une variable "Dossier" et une variable "Emplacement".
Mon entité Dossier contient plusieurs Emplacements alors qu'un Emplacement n'appartient qu'à un Dossier. OneToMany.

J'aimerai que lorsque je selectionne un dossier dans mon formulaire, ce soit les emplacements correspondant qui saffichent dans mon select emplacements ... j'ai donc suivit la doc symfony : https://symfony.com/doc/master/form/dynamic_form_modification.html

Voilà mon code :

Mon Formulaire :

/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('file', FileType::class, array('label' => 'Télecharger')) ->add('dossier', EntityType::class, array( 'class' => 'AMContentManagerBundle:Dossier', 'choice_label' => 'nom', )) ->add('piece', EntityType::class, array( 'class' => 'AMCoreBundle:Piece', 'choice_label' => 'nom', 'expanded' => true, 'multiple' => false, )) ->add('save', SubmitType::class, array('label' => 'Ajouter')); var_dump($builder); $formModifier = function (FormInterface $form, Dossier $dossier = null) { $emplacements = null === $dossier ? array() : $dossier->getAvailableEmplacements(); $form->add('emplacement', EntityType::class, array( 'class' => 'AMContentManagerBundle:Emplacement', 'placeholder' => '', 'choices' => $emplacements, )); }; $builder->addEventListener( FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formModifier) { // this would be your entity, i.e. SportMeetup $data = $event->getData(); $formModifier($event->getForm(), $data->getDossier()); } ); $builder->get('dossier')->addEventListener( FormEvents::POST_SUBMIT, function (FormEvent $event) use ($formModifier) { var_dump('entre'); // It's important here to fetch $event->getForm()->getData(), as // $event->getData() will get you the client data (that is, the ID) $dossier = $event->getForm()->getData(); // since we've added the listener to the child, we'll have to pass on // the parent to the callback functions! $formModifier($event->getForm()->getParent(), $dossier); } ); }

Mon controlleur :

$image = new Image(); $form = $this->get('form.factory')->create(ImageType::class, $image, array( 'action' => $this->generateUrl('ContentManager_image_list', array('dossier' => $dossier)) )); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { if($dossier = 'Galerie'){ $Thumb = $this->get('helper.imageresizer')->resizeImage($image->getFile(), $path, $height=105, $width=140); } if($dossier = 'Activites'){ $Thumb = $this->get('helper.imageresizer')->resizeImage($image->getFile(), $path, $height=150, $width=200); } $image->setUrlThumbnail($Thumb); $em = $this->getDoctrine()->getManager(); $em->persist($image); $em->flush(); $request->getSession()->getFlashBag()->add('notice', 'Image bien créée'); return $this->redirectToRoute('ContentManager_image_home'); } // L'appel de la vue ne change pas return $this->render('AMContentManagerBundle:Image:list.html.twig', array( 'form' => $form->createView(), ));

et enfin ma vue ;

{% block body %} {{ form_start(form) }} {# -- Image -- #} <div class="form-group" id="formImage" > {{ form_label(form.file, "Image", {'label_attr': {'class': 'control-label'}}) }} {{ form_errors(form.file) }} {{ form_widget(form.file) }} </div> {# -- Dossier -- #} <div class="form-group" id="formDossier" > {{ form_label(form.dossier, "Dossier", {'label_attr': {'class': 'control-label dossierchange'}}) }} {{ form_errors(form.dossier) }} {{ form_widget(form.dossier) }} </div> {{ form_row(form.emplacement) }} <div class="form-group"> {{ form_rest(form) }} </div> {{ form_end(form) }} {% endblock %} {% block javascripts %} <script> $(function(){ jQuery(document).ready(function() { console.log("jQuery est prêt !"); var $dossier = $('#image_dossier'); $dossier.change(function() { var $form = $(this).closest('form'); var data = {}; data[$dossier.attr('name')] = $dossier.val(); console.log('url : '+$form.attr('action')); console.log('type: '+$form.attr('method')); console.log('data : '+data); $.ajax({ url : "", type: $form.attr('method'), data : data, success: function(html) { console.log(html); $('#image_emplacement').replaceWith( $(html).find('#image_emplacement') ); } }); }); }) }); </script>

L'erreur que j'obtiens est celle-ci : mon URL net::ERR_CONNECTION_RESET

Quelqu'un a une idée ? j'ai tout essayé ... en plus le profiler Symfony ne m'aide pas du tout.

Merci d'avance

6 réponses

Robin0611, il y a 9 ans

Personne ne peut m'aider ?

Elyanor, il y a 9 ans

Hello,

As-tu vidé ton cache ? Quel environnement de dev as-tu mis en place ? Cette erreur ne semble pas en rapport avec ton code. Peut-être que je me trompe, je up le sujet quand même ;-)

Robin0611, il y a 9 ans

Merci.

Oui j'ai bien vidé mon cache ....

Mon environnement de dev ? je suis sur Wamp .....

Une idée ?

Lartak, il y a 9 ans

Bonjour.
Dans le code que tu nous montre, tu ne fermes pas le block javascripts (à moins que ce soit juste une erreur de copie), ça ne viendrait pas de ça ?

Robin0611, il y a 9 ans

Ah oui non non c'est une erreur de copié collé. Désolé. Mon block est bien fermé ....

Robin0611, il y a 9 ans

Ca marche vraiment pas :'(