Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AJAX] [SF4] La mise à jour ne se fait pas

Expected argument of type "string", "null" given

10 juin 2021 à 11:49:07

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 :

Expected argument of type "string", "null" given at property path "titleFR".

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

  • Partager sur Facebook
  • Partager sur Twitter

Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)