2013-01-04 74 views
0

我想使用ajax更新单个实体字段。基本上我没有形式,只需点击链接传递id和值来触发ajax。但我有实体形式的多个文件字段。因此,当我更新实体PrePersistPostPersist函数触发文件上传。我不想在此更新中执行此操作。symfony2不验证文件上传更新

我的控制器动作

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')); 

    } 

什么我做错了,我怎么能解决这个问题!

+0

给我你的postPersist订户。当我做文件上传时,我将事件订阅者添加到一个Form(前'postBind'),但不添加到实体 –

+0

@MaxMałecki:我完全按照[symfony2 cook book](http://symfony.com/doc/2.0 /cookbook/doctrine/file_uploads.html)。那么如何添加事件订阅者来形成即时的实体 – Gowri

回答

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和赋给变量$this->upload上传服务。