symfony2不会在更新时验证文件上载

时间:2013-01-04 05:51:47

标签: symfony doctrine-orm symfony-2.1 symfony-forms

我想使用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'));

    }  

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

1 个答案:

答案 0 :(得分:0)

这里有一个关于表单事件订阅者的文档:

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

  1. 使用postBind事件。
  2. 然后检查表格isValid()
  3. 如果有效,请致电您的服务负责文件上传。
  4. 我是这样做的:

    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