frengky / yupload
Laravel 文件上传维护包
v2.0.0
2020-01-14 01:45 UTC
Requires
- php: >=7.2
- intervention/image: ^2.4
- laravel/framework: 6.*
Requires (Dev)
- mockery/mockery: ^1.3
- orchestra/database: ^4.2
- orchestra/testbench: ^4.4
- phpunit/phpunit: ^8
README
Laravel 文件上传维护包。它有助于维护每个模型上的文件上传。
这个包做什么?
- 管理与模型相关的文件上传
- 上传的文件使用
Storage
存储,无需路径配置,遵循您的config/filesystem.php
- 无需创建额外的数据库表/字段,多亏了动态的
upload_*
修改器和访问器。 - 通过
uploads
修改器和访问器存储多个文件 - 任何上传的文件都将自动维护,更新时会删除和替换。
安装
通过 Composer
安装包
composer require frengky/yupload
然后发布配置文件到您的 app/config
php artisan vendor:publish --tag=config
最后,运行迁移来创建 uploads
表
php artisan migrate
应用于模型
对于每个有文件上传的模型,使用 HasUploads
特性
use Frengky\Yupload\Concerns\HasUploads; class User extends Authenticatable { use HasUploads; // store uploaded files under 'user/' path } class Product extends Model { use HasUploads; // store upload under 'product/' path }
物理文件将使用
Storage
存储到您选择的磁盘。它将使用您的模型名称(小写)作为路径。
存储上传的文件
通过 uploads
和 upload_*
修改器保存上传的文件
$user = User::find(1); // Store uploaded file via dynamic mutator $user->upload_photo = $request->file('photo'); $user->upload_screenshot = $request->file('screenshot'); $user->uploads = $request->file('all_documents'); // via create $newUser = User::create([ 'name' => 'Foo', 'email' => 'foo@example.com', 'upload_photo' => $request->file('photo') ]); // store or update via fill $user->fill([ 'upload_photo' => $request->file('photo') ]); // store via relationship $user->uploads()->save( Upload::make($request->file('photo')) ); // Store multiple files via predefined 'uploads' mutators $user->uploads = $request->files; $user->uploads = $request->file('anotherfile1'); $user->uploads = $request->file('anotherfile2'); // Finally call save() your model as usual to save the related uploaded files $user->save();
所有以
upload_*
开头的属性都是虚拟修改器,无需为每个上传类型创建数据库字段。uploads
属性是预定义的修改器,用于存储多个文件。
访问上传的文件
通过 uploads
和 upload_*
访问器访问上传的文件
$product = Product::find(1); // via accessor $photo = $product->upload_photo; // via relationship $photo = $product->uploads()->ofType('photo'); // All uploaded file for this entity $allFiles = $product->uploads;
更新/替换上传的文件
$product = Product::find(1); // via accessor $product->upload_photo = $request->file('photo'); $product->save(); // via 'Upload' model $photo = $product->uploads()->ofType('photo'); $photo->file = $request->file('photo'); $photo->save();
在保存()时,之前的物理文件将自动删除
删除上传的文件
// Delete single uploaded file $photo = $user->upload_photo; $photo->delete(); // Delete all uploaded file related to this entity $user->deleteUploads(); // Deleting the entity also delete all related uploaded file $user->delete();
如果您的模型使用 SoftDeletes,则上传的文件将被保留,仅在 forceDelete() 时被删除;
现在就到这里了。