【发布时间】: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 按钮提交表单时无需任何提交按钮。
【问题讨论】:
-
您可以使用 VichUploaderBundle。这很容易,简单且有用。文档在这里github.com/dustin10/VichUploaderBundle/blob/master/Resources/…
标签: php forms symfony formbuilder