【问题标题】:Symfony3 upload file without using FormBuilderSymfony3 不使用 FormBuilder 上传文件
【发布时间】:2017-07-06 10:22:56
【问题描述】:

我有一个带有文件的项目,当我创建新项目时,我用FormBuilder 创建了一个表单,我有一个来自FileType 的字段,然后它被转换为UploadedFile,它工作正常。我想要的是能够在该文件之后上传而无需编辑项目。一个简单的“添加更多文件”按钮。不需要其他字段,因此 - 不需要FormBuilder。我也不想在点击“添加更多文件”后有“保存”按钮。我想点击它选择我的文件,当我点击“打开”时,要提交的表格。这是我通过以下代码实现的

<form action="{{ path('image_upload', { 'id': project.id }) }}" method="post" name="form">                              
  <div class="col-md-2" id="imageUpload">
    <span>Add More Files</span>
      <input type="file" readonly="readonly" id="imageUpload" name="image_upload[]" onchange="form.submit()" multiple/><div class="upload_icon"></div>
  </div>    
</form> 

如您所见,此表单只有onChange 提交的一个按钮。我的问题是提交后文件不是UploadedFile 类型并且我用于上传图像的服务不起作用。我尝试自己创建一个UploadedFile 的实例,但它需要filePath,我不知道该怎么做。

这是提交的内容

由此我不知道如何将filePath实际添加到UploadedFile的构造函数中。此外,当我调试项目创建期间发生的事情(我使用FileType)时,我看到文件路径是“C:\xampp\tmp”,我不知道它来自哪里。我的第一个想法是使用此代码将其简单地添加到 UploadedFile 的构造函数中

$file = new UploadedFile("C:\\xampp\\tmp",$file);

当我运行它时,我收到了这个错误 -

文件“C:\xampp\tmp”不存在

所以回顾一下 - 这是我使用 FileType 时 $file->getPath() 给我的路径,但是当我有简单的上传按钮时没有它,它不存在。

此时我投降了,就像“好吧......如果它想让我如此糟糕地使用 FormBuilder - 那我会的”。这是 AddFileType 中的代码(与任何实体或任何东西无关)

$builder->
        add("addFiles",FileType::class,array(
            'label'=>'Add More Files',
            'multiple'=> true,
            'mapped'=> false,
            "required"=>false
        ));

这是另一个问题 - 我希望能够在没有提交按钮的情况下提交表单。只需单击“添加更多文件”并选择一些文件,即可为我提交表单。

我的问题 - 有没有办法在使用简单的上传按钮时获取文件路径,从而创建一个 UploadedFile 的实例并将其从我的服务发送到我的数据库。如果没有,FormBuilder 是否有办法做到这一点,以便在单击 FileType 按钮提交表单时无需任何提交按钮。

【问题讨论】:

标签: php forms symfony formbuilder


【解决方案1】:

我认为您需要将 mapped 设置为 true,因为将其设置为 false 将不会成为该字段与数据库字段之间的关系

$builder->
    add("addFiles",FileType::class,array(
        'label'=>'Add More Files',
        'multiple'=> true,
        'mapped'=> true,
        "required"=>false
    ));

【讨论】:

    【解决方案2】:
    public function addArticleAction(Request $request){
    
        //get pic from http request
        $Image = $this->getRequest()->files->get('artPic'); 
    
        //generate a unique name for pic
        $picName = $this->generateUniqueFileName().'-'.$Image->getClientOriginalName();
    
        //move pic to a directory
        $Image->move(
                $this->getParameter('pic_directory'),
                $picName
            );
    
        //store picName in db
        $article = new FlashInfo;
        $article->setPhoto($picName);
    
          //other data  
         $request = $request->request->all();
         $article->setTitle($request['arTitle']);
         $article->setTitle($request['arText']);
         $article->setTitle($request['artSource']);
    
    
     return new Response(json_encode(array('status'=>'success')));
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2023-03-21
      • 2018-07-12
      • 2018-09-30
      相关资源
      最近更新 更多