0

我想使用 ajax 更新单个实体字段。基本上我没有表单,我只是通过单击传递 id 和 value 的链接来触发 ajax。但我有实体形式的多个文件字段。因此,当我更新实体PrePersistPostPersist函数正在触发文件上传时。我不想在此更新中执行此操作。

我的控制器动作

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 回答