我正在尝试通过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 } });
控制器(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; }
解决方法
我建议把id传递给控制器.
HTML:
<form class="ajax" action="{{ path('ajax_setSocial',{ 'id': entity.id }) }}" method="post" {{ form_enctype(form) }}> var url = "{{ path('ajax_setSocial',{ 'id': entity.id }) }}";
控制器注释,参数和返回值,以获取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 ); }
将错误传回html就是这样的:
// 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; }