Vous utilisez un navigateur obsolète, veuillez le mettre à jour.
Veuillez utiliser un navigateur internet moderne avec JavaScript activé pour naviguer sur OpenClassrooms.com
Une question ? Pas de panique, on va vous aider !
Ce sujet est fermé.
Bonjour,
Voilà, j'ai du me mettre à l'AJAX qui j'avoue est assez pratique, mais je n'ai pas encore compris toute les nuances...
J'ai un formulaire en symfony :
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('category', EntityType::class, [ 'label' => 'page.label.category', 'class' => PageCategory::class, 'choice_label' => "nameFR", 'multiple' => false, 'placeholder' => '', "required" => false, ]) ->add('titleFR', TextType::class, [ 'label' => 'page.label.titleFR', ]) /*->add('titleEN', TextType::class, [ 'label' => 'page.label.titleEN', 'required' => false ])*/ ->add('contentFR', CKEditorType::class, [ 'label' => 'page.label.contentFR', 'config' => array('toolbar' => 'TextAndMedia'), ]) /*->add('contentEN', CKEditorType::class, [ 'label' => 'page.label.contentEN', 'config' => array('toolbar' => 'TextAndMedia'), 'required' => false ])*/ ->add('cancel', ResetType::class, [ 'label' => 'page.button.cancel', ]) ->add('save', SubmitType::class, [ 'label' => 'page.button.save', ]) ->add('after', EntityType::class, [ 'class' => PageContent::class, 'choice_label' => 'title', 'choice_translation_domain' => false, 'label' => 'page.label.after', 'placeholder' => 'page.choose.after', 'mapped' => false, 'choices' => [], "required" => false, "expanded" => false, 'empty_data' => null, ]); // On crée la liste liée après pour une catégorie $builder->get('category')->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $form = $event->getForm(); if (null != $form->getData()) { $this->addAfterField($form->getParent(), $form->getData()); } }); }
private function addAfterField(FormInterface $form, PageCategory $category) { $form->add('after', EntityType::class, [ 'class' => PageContent::class, 'query_builder' => function(EntityRepository $er) use ($category) { $pages = $er->createQueryBuilder('p') ->andwhere('p.displayed = 1') ->andWhere('p.category = :category') ->setparameter("category", $category->getId()) ->addOrderBy('p.displayOrder', 'ASC'); return $pages; }, 'choice_label' => 'titleFR', 'choice_translation_domain' => false, 'label' => 'page.label.after', 'mapped' => false, 'placeholder' => 'page.choose.first', "expanded" => false, 'empty_data' => null, "required" => false ]); }
et mon code JS :
$(document).on('change', '#page_content_category', function () { let $field = $(this); let $form = $field.closest('form'); let data = {}; data[$field.attr('name')] = $field.val(); $.post($form.attr('action'), data).then(function (data) { let $input = $(data).find('#page_content_after'); $('#page_content_after').replaceWith($input); }); });
Le problème ne se produit pas lorsque je créé une page mais uniquement lorsque je veux la modifier (le formulaire est le même pour les 2)
Quand je veux changer la page de categorie j'ai ce message :
Sauf que ce n'est pas null, puisque pré rempli par la page existante...
Je ne sais pas vraiment si c'est lié à l'AJAX ou à Symfony...
Si quelqu'un veut bien m'aider svp...
Et désolée si je me suis trompée de forum
-Edité par lindadu01 10 juin 2021 à 11:49:39
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)