我有一个包含文件的项目,当我创建新项目时,我使用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
),我看到filePath是&#34; C:\ xampp \ tmp&#34;我不知道它来自哪里。我的第一个想法是简单地使用此代码
UploadedFile
的构造函数中
$file = new UploadedFile("C:\\xampp\\tmp",$file);
当我运行它时,我收到此错误 -
文件&#34; C:\ xampp \ tmp&#34;不存在
所以回顾一下 - 这是$ file-&gt; getPath()在我使用FileType
时给出的路径,但是当我有简单的上传按钮时没有它,它就不存在了。
此时我投降了,就像是#34;好吧......如果它想让我如此糟糕地使用FormBuilder - 那么我会&#34;。这是AddFileType中的代码(与任何实体或任何东西无关)
$builder->
add("addFiles",FileType::class,array(
'label'=>'Add More Files',
'multiple'=> true,
'mapped'=> false,
"required"=>false
));
这是另一个问题 - 我希望能够在没有提交按钮的情况下提交表单。只需当我点击&#34;添加更多文件&#34;并选择一些文件作为我提交的表格。
我的问题 - 有没有办法在使用简单上传按钮时获取filePath,从而创建UploadedFile
的实例并将其从我的服务发送到我的数据库。如果没有 - 有FormBuilder
的方法可以在单击FileType按钮提交表单时不需要任何提交按钮。
答案 0 :(得分:1)
我认为您需要将映射设置为true,因为通过将其设置为false,它不会是此字段与数据库字段之间的关系
idEditText =(EditText) findViewById(R.id.editText_id);
nameEditText =(EditText)findViewById(R.id.editText_Name);
dateEditText =(EditText)findViewById(R.id.editText_Date);
private boolean checkEmptyFields() {
boolean check = false
String id = idEditText.getText().toString().trim();
String name = nameEditText.getText().toString().trim();
String date = dateEditText.getText().toString().trim();
if (id.isEmpty()) {
idEditText.setError("Invalid Input");
check = true;
} else {
dEditText.setError(null);
check = false;
}
if (name.isEmpty()) {
nameEditText.setError("Invalid Input");
check = true;
} else {
nameEditText.setError(null);
check = false;
}
if (date.isEmpty()) {
dateEditText.setError("Invalid Input");
check = true;
} else {
dateEditText.setError(null);
check = false;
}
return check;
}
if (!checkEmptyFields())
{
//Add Data to DB
}
答案 1 :(得分:0)
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')));
}