2012-06-06 3 views
0

Symfony2를 사용하여 AJAX에 레코드를 삽입/업데이트하려고합니다. JQuery를 사용하여 양식을 제출합니다. 여기 내 컨트롤러가 :Ajax 및 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; 
     } 

    } 

} 

이 코드는 잘 삽입되지만 데이터를 업데이트 할 수 없습니다. 그것은 계속 삽입합니다. 새 ID를 응답으로 보내 업데이트하는 방법을 직접 구현해야합니까, 아니면 Symfony가 자동으로 응답하도록하는 방법이 있습니까?

도움을 주셔서 감사합니다.

+0

'$ myEntity = 새로운 myEntity()을 시도 할 수 있습니다,'당신은 당신이 당신의 실체를로드했습니다 업데이 트를 수행하려는 경우 당신에게서 데이터베이스. 하지만 엔티티를 만들고 그 페이지를 다시로드하지 않고이 엔티티를 편집 할 수 있습니까? – Snroki

+0

네, 그게 전부입니다. 새 ID를 클라이언트에 보내고 업데이트를위한 다음 ajax 요청에서 다시 보내는 것 이외에이 작업을 수행하는 방법을 정확히 알지 못합니다. – Ben

+0

페이지를 다시로드하지 않고도 할 수 있는지 잘 모르겠습니다. 어쩌면 숨겨진 필드를 추가하고 ID가 업데이트 일 때 내부로 푸시하고 양식 유효성 검사에 규칙을 추가하려고 할 수 있습니다. – Snroki

답변

1

//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; 
    } 

} 

같은}

때문에 선의의
관련 문제