Bonjour,
j'ai de petits soucis avec l'intégration d'ajax dans symfony.
je souhaite afficher un formulaire et ensuite soumettre un formulaire avec ajax.
voici ce que j'ai fait pour aficher le formulaire

public function afficheAction(Request $request)
    {
        if($request->isXmlHttpRequest()){
            $backlog = new Backlogs();
            $form = $this->createForm('App\MemberBundle\Form\BacklogsType', $backlog);
            $form->handleRequest($request);
            $response = new Response();
            $data = json_encode(array('backlog' => $backlog,
                                    'form' => $form->createView()
            ));
            $response->setContent($data);
            return $this->render('AppMemberBundle:Project:Backlogs/affiche.html.twig', array(
                'backlog' => $backlog,
                'form' => $form->createView(),
            ));
        }
    }

Pour le code ajax,

var ajaxModule = function(){
        $('.add-story').each(function(){
            var $this = $(this),
                loadButton = $(this).find('.add-story-loader'),
                brId = loadButton.attr('id');
            loadButton.click(function(){
                $.ajax({
                    type: 'GET',
                    url: Routing.generate('backlogs_new'),
                    success: function(data){
                        console.log(data);
                        $this.html(data).show();
                    }
                })
            });
        });
    }

et la vue affiche action

{{ form_start(form , { 'attr': {'class': 'form'} }) }}
<div class="field">
    {{ form_widget (form.userstory, {'attr':{'class':'add-story-field'}} ) }}
    <input type="submit" class="button button-float-r button-medium add-story-button" value="Ajouter">
    <div class="clear"></div>
</div>
{{ form_end(form) }}

l'erreur afficher est

The Response content must be a string or object implementing __toString(), "boolean" given. 

Après Débugage, il semble que je n'ai pas le droit de passer
'form' => $form->createView()
dans
$data = json_encode(array('backlog' => $backlog,
'form' => $form->createView()
));

besoin d'aide

1 réponse


zikou23
Réponse acceptée

1- C'est lorsque tu fais appels à la méthode $response->setContent($data) qui bug, tu t'attends à ce que $data retourne un string mais non, déjà tu as déjà appelé le handleRequest() avant p-e que par la suite c'est $form->createView() qui en est la cause, voit d'abord ce que $data retourne en faisant un die() avant,
2- Je ne vois pas l'intérêt d'assigner le contenu dans ta Response même si ce n'est pas le retour de ta méthode alors qu'après tu fais appel à la méthode renderView()