2012-06-06 3 views
0

J'essaie d'insérer/mettre à jour un enregistrement dans AJAX en utilisant Symfony2. Je soumets mon formulaire en utilisant JQuery. Voici mon contrôleur:Insérer et mettre à jour l'enregistrement avec Ajax et Symfony2

public function myEntitysAction(){ 

    $em = $this->getDoctrine()->getEntityManager(); 
    $request = $this->getRequest(); 
    $AJAXresponse = array(); 

    $myEntity = new myEntity();  
    $form = $this->createForm(new myEntityType(), $myEntity); 

    if ($request->getMethod() == 'POST') { 

     $form->bindRequest($this->getRequest()); 

     if ($form->isValid()) { 
      $AJAXResponse['code'] = 'OK'; 
      $em->persist($myEntity);   
      $em->flush(); 
     }else{   
      $AJAXResponse['code'] = 'ERR'; 
     } 

     if ($request->isXmlHttpRequest() == true) { 
      $response = new Response(json_encode($AJAXResponse)); 
      $response->headers->set('Content-Type', 'application/json'); 
      return $response; 
     } 

    } 

} 

Le problème est que ce code insère bien, mais je ne peux pas mettre à jour les données; il continue à insérer. Dois-je mettre en œuvre un moyen de mettre à jour en renvoyant le nouvel identifiant à la réponse ou y a-t-il un moyen avec Symfony de le gérer automatiquement?

Merci beaucoup pour votre aide.

+0

C'est à cause de la ligne '$ MyEntity = new MyEntity()' si vous voulez faire une mise à jour que vous avez à charger votre entité de votre base de données. Mais vous voulez créer une entité et ensuite être en mesure de modifier cette entité sans recharger la page qu'il est? – Snroki

+0

oui c'est tout. Pas exactement sûr de savoir comment faire cela en plus d'envoyer le nouvel identifiant au client et de le renvoyer dans la prochaine requête ajax pour la mise à jour. – Ben

+0

Je ne suis pas sûr que vous pouvez le faire sans recharger la page. Peut-être que vous pouvez essayer d'ajouter un champ caché et pousser l'identifiant à l'intérieur quand il s'agit d'une mise à jour et simplement ajouter une règle dans la validation de votre formulaire. – Snroki

Répondre

1

vous pouvez essayer quelque chose comme ça

//Firt, update your route (p. ex) 
site_add: 
    pattern: /edit/add 
    defaults: { _controller: YOURBUNDLE:YOURCONTROLLER:myEntitys } 

site_update: 
    pattern: /edit/{id} 
    defaults: { _controller: YOURBUNDLE:YOURCONTROLLER:myEntitys } 


//Then in your controller 

//... 
public function myEntitysAction($id = null){ 

$em = $this->getDoctrine()->getEntityManager(); 
$request = $this->getRequest(); 
$AJAXresponse = array(); 

//To modify 
if(isset($id)){ 
    $myEntity = $em->find('YOURBUNDLE:YOURENTITY', $id); 
} 
//To create 
else{ 
    $myEntity = new myEntity(); 
} 
//Both return an objet 

//Form will be render depeding on objet. 
$form = $this->createForm(new myEntityType(), $myEntity); 

if ($request->getMethod() == 'POST') { 

    $form->bindRequest($this->getRequest()); 

    if ($form->isValid()) { 
     $AJAXResponse['code'] = 'OK'; 
     $em->persist($myEntity); 
     $em->flush(); 
    }else{ 
     $AJAXResponse['code'] = 'ERR'; 
    } 

    if ($request->isXmlHttpRequest() == true) { 
     $response = new Response(json_encode($AJAXResponse)); 
     $response->headers->set('Content-Type', 'application/json'); 
     return $response; 
    } 

} 

}

Questions connexes