photogabble/laravel-remember-uploads

Laravel 中间件和辅助工具,用于在表单验证期间记住上传的文件。

1.3.0 2018-03-14 21:24 UTC

README

中间件包

Build Status Latest Stable Version License

关于此包

此中间件解决了与表单验证错误无关的问题,这些问题会导致用户被重定向并丢失已上传的文件。它是通过在服务器端临时缓存通过验证的文件字段来实现的,这样在表单提交并通过验证后可以进行处理。

安装

使用 composer 将其添加到项目中:composer require photogabble/laravel-remember-uploads

Laravel 版本 >= 5.5

此库支持 Laravel >= 5.5 中的包自动发现

Laravel 版本 5.2 - 5.5

要启用此包,您需要将其服务提供者添加到 Laravel 的应用程序提供者配置中。

'providers' => [
    // ...
    
    Photogabble\LaravelRememberUploads\RememberUploadsServiceProvider::class,
    
    // ...
],

使用方法

您需要将中间件 remember.files 分配给处理上传文件的路由;在 CRUD 术语中,这将是 创建更新 方法。

为了使中间件能够了解前一个请求中的已记住文件,您需要通过使用名为 _rememberedFiles 的隐藏输入字段来引用。

@if( $oldFile = rememberedFile('file'))
    <input type="hidden" name="_rememberedFiles[file]" value="{{ $oldFile->getFilename() }}">
@else
    <input type="file" name="file">
@endif

然后在您的控制器代码中,您可以通过 rememberedFile 辅助函数来获取文件

function store(Illuminate\Http\Request $request) {    
    if ($file = $request->file('img', rememberedFile('img')) {
        // ... File exists ...
    }
}

如果当前请求中已提交或已记住文件,则 $file 变量将等于 Symfony\Component\HttpFoundation\File\UploadedFile 的实例。

此示例可在此库的测试中查看

数组文件字段

在您有多个具有相同名称的上传字段的情况下(例如 image[0]image[1]),辅助函数 rememberedFile('image') 将返回一个 Symfony\Component\HttpFoundation\File\UploadedFile 的数组。

引用 _rememberedFiles 也需要与文件输入的数组语法匹配

@if( $oldFile = rememberedFile('image'))
    <!-- $oldFile is now an array of Symfony\Component\HttpFoundation\File\UploadedFile -->
    <input type="hidden" name="_rememberedFiles[image][0]" value="{{ $oldFile[0]->getFilename() }}">
    <input type="hidden" name="_rememberedFiles[image][1]" value="{{ $oldFile[1]->getFilename() }}">
@else
    <input type="file" name="image[0]">
    <input type="file" name="image[1]">
@endif