我想使用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'));
}
我做错了什么,我怎么能解决这个问题!
答案 0 :(得分:0)
这里有一个关于表单事件订阅者的文档:
http://symfony.com/doc/2.0/cookbook/form/dynamic_form_generation.html
postBind
事件。isValid()
我是这样做的:
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
。