2013-02-24 11 views
11

Próbuję złożyć formularz za pośrednictwem ajax, aby zaktualizować pola danego podmiotu, ale nie wiem jak pobrać dane z kontrolera:Symfony2 wysłać formularz ajax

<form class="ajax" action="{{ path('ajax_setSocial') }}" method="post" {{ form_enctype(form) }}> 
    <div class="editor"> 
     {{ form_errors(form) }} 
     <div class="editLabel pls">{{ form_label(form.ragSocial) }}</div> 
     <div class="editField"> 
      <div class="ptm"> 
       {{ form_widget(form.ragSocial) }} {{ form_errors(form.ragSocial) }} 
      </div>  
      {{ form_rest(form) }} 
      <div class="mtm"> 
       <button class="btn btn-primary disabled save" type="submit">Save</button> 
       <button class="btn ann">Close</button> 
      </div> 
     </div> 
    </div> 

var url = Routing.generate('ajax_setSociale'); 
     var Data = $('form.ajax').serialize(); 
     $.post(url, 
      Data 
      , function(results){ 
       if(results.success == true) { 
        $(this).parents('ajaxContent').remove(); 
        $(this).parents('.openPanel').removeClass('openPanel'); 
       } else { 
        alert('False'); //test 
       } 
     }); 

kontroler (droga ajax_setSocial)

public function setSocialeAction(Request $request) 
{ 
     $em = $this->getDoctrine()->getManager(); 
     // $id = $request->get('form'); ??? 
    $entity = $em->getRepository('MyBusinessBundle:Anagrafic')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Anagrafic entity.'); 
    } 

    $form = $this->createFormBuilder($entity) 
     ->add('ragSocial', 'text', array('label' => 'Social')) 
     ->add('id', 'hidden') 
     ->getForm(); 
    $form->bind($request); 

    if ($form->isValid()) { 
     $em->persist($entity); 
     $em->flush(); 

     $output = array(); 
     $response = new Response(); 
     $output[] = array('success' => true); 
     $response->headers->set('Content-Type', 'application/json'); 
     $response->setContent(json_encode($output)); 
     return $response; 
    } 

jako wartości odzysku i przekazać identyfikator do tworzenia zapytanie oraz inne wartości Zaktualizować encję? A jeśli pola nie przejdą procesu sprawdzania oryginalności, w jaki sposób mogę przekazać błąd?

Odpowiedz

7

Proponuję przekazać identyfikator do sterownika .

html:

<form class="ajax" action="{{ path('ajax_setSocial', { 'id': entity.id }) }}" method="post" {{ form_enctype(form) }}> 

var url = "{{ path('ajax_setSocial', { 'id': entity.id }) }}"; 

Kontroler adnotacji, parametr i wartość zwracana, aby uzyskać ID:

/** 
* 
* @Route("/{id}", name="ajax_setSocial") 
* @Method("POST") 
*/ 
public function setSocialeAction(Request $request, $id) { 
    $em = $this->getDoctrine()->getManager(); 
    $entity = $em->getRepository('MyBusinessBundle:Anagrafic')->find($id); 

    return array(
     'entity' => $entity 
    ); 
} 

Przechodząc błąd z powrotem do html jest tak:

// dummy line to force error: 
// $form->get('ragSocial')->addError(new FormError("an error message")); 

if ($form->isValid()) { 
    ... 
} else { 
    $errors = $form->get('ragSocial')->getErrors(); // return array of errors 
    $output[] = array('error' => $errors[0]->getMessage()); // the first error message 
    $response->headers->set('Content-Type', 'application/json'); 
    $response->setContent(json_encode($output)); 
    return $response; 
} 
+0

Dziękujemy! To jest praca! – Lughino

+0

Podążyłem za tym podejściem i działa. Wielkie dzięki. Mam tylko jeden problem, Kontroler wymaga podania wartości dla argumentu "$ id" (ponieważ nie ma wartości domyślnej lub ponieważ po niej występuje nie opcjonalny argument). Czy możesz mi pomóc z tym problemem? –

+0

@whitelettersandblankspace w symfony2.3 możesz ustawić domyślną wartość w swoim kontrolerze, taką jak 'public function setSocialeAction (Request $ request, $ id = 1)'. W wersji 2.0 lub wcześniejszej (nie wiem) ustaw adnotację: '@Route ("/{id} ", name =" ajax_setSocial ", defaults = {" id "= 1})' – ihsan

Powiązane problemy