File upload Laravel Input::hasfile()对输入数组有效吗?

File 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” 这是预期的行为吗?或者,它应该查

我正在从事一个Laravel项目,该项目使用一个具有多个文件输入的表单。如果我提交表单时第一个输入为空,所有其他输入为文件,那么hasFile返回false。仅当第一个输入包含文件时,才会返回true

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;
    }