0

Symfony2 を使用して AJAX でレコードを挿入/更新しようとしています。JQuery を使用してフォームを送信しています。これが私のコントローラーです:

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 でそれを自動的に処理する方法はありますか?

どうもありがとうございました。

4

1 に答える 1

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

}

}

于 2014-01-19T13:11:03.763 に答える