Laravel:多文件上传,Input :: hasFile(key)始终为false

时间:2014-07-15 14:55:30

标签: forms validation file-io laravel

我使用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')总是在Input:has('file') returns true时返回false。

到目前为止我一直在尝试:

  

日志::信息(输入::文件( '文件')); &lt; - empty

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')不返回文件对象。如何修改我的代码以捕获提交的文件?

1 个答案:

答案 0 :(得分:3)

感谢您的帮助,Kestutis的回答表明了这一点。在Laravel中定义文件表单的常用方法是

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

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

使用laravel表单构建器&#34;前&#34;你必须用

打开表格
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 ...
            }