【问题标题】:symfony2 don't validate file upload on updatesymfony2 在更新时不验证文件上传
【发布时间】:2013-01-04 05:51:47
【问题描述】:

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

    }  

我做错了什么,我该如何解决这个问题!

【问题讨论】:

  • 给我你的 postPersist 订阅者。当我上传文件时,我将事件订阅者添加到表单(例如 postBind)而不是实体
  • @MaxMałecki:我在symfony2 cook book 中所做的完全一样。那么如何添加事件订阅者以形成实体的瞬间

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多