photogabble / laravel-remember-uploads
Laravel 中间件和辅助工具,用于在表单验证期间记住上传的文件。
Requires
- php: >=5.6.0
Requires (Dev)
- orchestra/testbench: ~3.4
- phpunit/phpunit: 5.7.*
This package is auto-updated.
Last update: 2024-08-29 04:54:18 UTC
README
中间件包
关于此包
此中间件解决了与表单验证错误无关的问题,这些问题会导致用户被重定向并丢失已上传的文件。它是通过在服务器端临时缓存通过验证的文件字段来实现的,这样在表单提交并通过验证后可以进行处理。
安装
使用 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