File upload Laravel Input::hasfile()对输入数组有效吗?
我正在从事一个Laravel项目,该项目使用一个具有多个文件输入的表单。如果我提交表单时第一个输入为空,所有其他输入为文件,那么hasFile返回false。仅当第一个输入包含文件时,才会返回trueFile upload Laravel Input::hasfile()对输入数组有效吗?,file-upload,input,laravel,File Upload,Input,Laravel,我正在从事一个Laravel项目,该项目使用一个具有多个文件输入的表单。如果我提交表单时第一个输入为空,所有其他输入为文件,那么hasFile返回false。仅当第一个输入包含文件时,才会返回true if(Input::hasfile('file')) { // do something } 这是通过input::file('file)的输入数组。小图像输入为空,但大图像输入为空。我希望它查看整个阵列,如果存在任何文件,则继续执行“Dosomething” 这是预期的行为吗?或者,它应该查
if(Input::hasfile('file'))
{
// do something
}
这是通过input::file('file)的输入数组。小图像输入为空,但大图像输入为空。我希望它查看整个阵列,如果存在任何文件,则继续执行“Dosomething”
这是预期的行为吗?或者,它应该查看整个阵列吗?取自源代码:
/**
* Determine if the uploaded data contains a file.
*
* @param string $key
* @return bool
*/
public function hasFile($key)
{
if (is_array($file = $this->file($key))) $file = head($file);
return $file instanceof \SplFileInfo;
}
它似乎只检查数组中的第一项,
head
返回数组中的第一项。下面是一个可能有用的代码片段
if(Input::hasFile('myfile')){
$file = Input::file('myfile');
// multiple files submitted
if(is_array($file))
{
foreach($file as $part) {
$filename = $part->getClientOriginalName();
$part->move($destinationPath, $filename);
}
}
else //single file
{
$filename = $file->getClientOriginalName();
$uploadSuccess = Input::file('myfile')->move($destinationPath, $filename);
}
} else {
echo 'Error: no file submitted.';
}
取自
您可以使用数组键进行检查,例如如下所示:- HTML输入类型文件元素:
<input type="file" name="your_file_name[]" />
Laravel 5:$request->hasFile('您的文件名'。$key)
Laravel 4.2:
Input::hasFile('your_file_name..$key)
既然我不能发表评论,看来我不得不发布了
Ronak Shah的答案应该是正确的,当我弄清楚原因后,我在30-40分钟的努力后,立刻说“Sonnofa——”。。。“搞砸”了
如果要在输入数组中使用hasFile(),则需要使用点表示法。
所以(用我自己的例子)而不是
$request->hasFile("img[29][file]")
这是必须的
$request->hasFile("img.29.file")
考虑到PHP和点表示法并没有真正结合在一起,这无疑是一个令人大开眼界的问题。输入数组确实是有问题的子对象 在编写本文时(Laravel 8),请求
类现在支持hasFile
方法的数组
s,如下所示:
谢谢我读过,但不幸的是,我的技能让我无法理解。我有一种感觉,它正在按预期工作。只是需要确认一下。欢迎并希望你明白这个想法:-)是的,有道理。谢谢你指出我的头。我不确定这是什么意思。
如果(is_array($file))
检查不符合逻辑,因为我们已经在命名字段输入字段的表单中决定了,如果它在末尾有[]
,它将始终是一个数组。。。
$request->hasFile("img.29.file")
/**
* Determine if the request contains the given file.
*
* @param string $name
* @param string|null $value
* @param string|null $filename
* @return bool
*/
public function hasFile($name, $value = null, $filename = null)
{
if (! $this->isMultipart()) {
return false;
}
return collect($this->data)->reject(function ($file) use ($name, $value, $filename) {
return $file['name'] != $name ||
($value && $file['contents'] != $value) ||
($filename && $file['filename'] != $filename);
})->count() > 0;
}