【问题标题】:Laravel: Multiple File Upload, Input::hasFile(key) always falseLaravel:多个文件上传,输入::hasFile(key) 总是假的
【发布时间】:2014-07-15 14:55:30
【问题描述】:

我使用来自https://github.com/Anahkiasen/former 的前一个生成器工具生成了一个多重上传表单。

{{ Former::files('file')->accept('image')->required(); }}

结果

<input multiple="true" accept="image/*" required="true" id="file[]" type="file" name="file[]">

在我提交表单后,我发现Input::hasFile('file') 总是返回 false 而Input:has('file') returns true

到目前为止我所尝试的:

Log::info(输入::file('file'));

foreach(Input::file('file') as $file) <-- Invalid argument supplied for foreach()
    Log::info("test"); 

if(Input::has('file')) 
{
    if(is_array(Input::get('file')))
        foreach ( Input::get('file') as $file) 
        {
            Log::info($file); <-- returns the filename
            $validator = Validator::make( array('file' => $file), array('file' => 'required|image'));
            if($validator->fails()) {
                ...
            }
        }
}   

当然,验证器总是失败,因为 Input::get('file') 没有返回文件对象。如何修改我的代码以捕获提交的文件?

【问题讨论】:

  • 你是用'files' =&gt; true打开表格吗?
  • 我从未见过这个选项,但我试了一下,不幸的是它并没有改变结果
  • 该选项设置正确的加密类型 (enctype='multipart/form-data'),如果您尝试上传文件,这是必要的,有关此here 的更多信息。
  • 这篇文章可能会有所帮助,但我不确定它是否能回答您的问题:forumsarchive.laravel.io/viewtopic.php?id=2839

标签: forms validation file-io laravel


【解决方案1】:

感谢您的帮助,Kestutis 的回答说的很清楚。在 Laravel 中定义文件形式的常用方法是

echo Form::open(array('url' => 'foo/bar', 'files' => true))

此选项使用 enctype='multipart/form-data' 设置正确的加密类型。

使用 laravel 表单构建器“Former”,您必须使用

打开表单
Former::open_for_files()

之后,您可以以常用方式验证表单。

if(Input::hasFile('files')) {
            Log::info(Input::File('files'));
            $rules = array(
                ...
            );

            if(!array(Input::File('files')))
                $rules["files"] = 'required|image';
            else 
                for($i=0;$i<count(Input::File('files'));$i++) {
                    $rules["files.$i"] = 'required|image';
                }

            $validation = Validator::make(Input::all(), $rules);

            if ($validation->fails()) 
            {
                return ...
            }
            else {
                // everything is ok ...
            }

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 2018-03-29
    • 1970-01-01
    • 2016-11-28
    • 2014-04-15
    • 2019-01-17
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多