0

ajax を使用して単一のエンティティ フィールドを更新したいと考えています。基本的にフォームはありません。単純に、ID と値を渡すリンクをクリックして ajax をトリガーしています。しかし、エンティティ形式で複数のファイル フィールドがあります。そのため、エンティティを更新している間、PrePersistおよびPostPersist関数がファイルのアップロードをトリガーしています。今回のアップデートではこれを行いたくありません。

私のコントローラーアクション

public function ajaxupdateAction(Request $request){

        $data  =  $request->query->get('data');

        $id = $data['id'];

         $em = $this->getDoctrine()->getManager();
         $entry = $em->getRepository('RootContestBundle:Entry')->find($id);

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

        $form =  $this->createFormBuilder(array('id' => $id,'is_liked'=>true))
                    ->add('id', 'hidden')
                    ->add('is_liked','hidden')
                    ->getForm();      
        $entry->setIsLiked(true);
        $form->bind($this->getRequest());

        $em->persist($entry);

        $em->flush();

     return new JsonResponse(array('reverse'=>'dislike'));

    }  

私が間違っていること、どうすればこれを解決できますか!

4

1 に答える 1

0

ここでは、フォーム イベント サブスクライバーに関するドキュメントを取得します。

http://symfony.com/doc/2.0/cookbook/form/dynamic_form_generation.html

  1. postBindイベントをご利用ください。
  2. 次に、フォームかどうかを確認しますisValid()
  3. 有効な場合は、ファイルのアップロードを担当するサービスを呼び出します。

これが私がこれをした方法です:

public function postBind(FormEvent $event)
{
    $data = $event->getData();

    $form = $event->getForm();
    $file = $form->get('upload')->getData();
    if($file && $form->isValid())
    {
        $result = $this->upload->uploadFile($file);
        $data->setUpload($result);
    }
    $event->setData($data);
}

私のメソッドには、DI によって注入され、 variable に割り当てられたアップロード サービスがあります$this->upload

于 2013-01-04T15:28:22.137 に答える