asseco-voice / laravel-attachments
Laravel附件支持
v2.11.0
2024-08-02 09:57 UTC
Requires
- php: ^8.1
- asseco-voice/laravel-common: ^3.0
- laravel/framework: ^10.0
Requires (Dev)
- doctrine/dbal: 3.5
- fakerphp/faker: ^1.9.1
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^8.5
- phpunit/phpunit: ^10.0
README
附件
本仓库的目的是启用附件上传,并将其连接到任何Laravel模型作为M:N关系。
安装
使用composer require asseco-voice/laravel-attachments
安装此包。服务提供程序将自动注册。
配置
为了使用此包,使用artisan migrate
迁移表,并将Attachable
特质添加到您希望具有附件支持的模型上。
use Asseco\Attachments\App\Traits\Attachable; class Product extends Model { use Attachable; // ... }
标准CRUD端点是公开的,用于附件管理,您可以在其中执行各种操作,例如存储附件。由于附件是形态关系,您必须为附加/分离这些附件到附加模型提供自己的控制器。
示例
Route::post('models/{model}/attachments', [ModelAttachmentController::class, 'store']); public function store(Request $request, Model $model): JsonResponse { $ids = Arr::get($request->validated(), 'attachment_ids', []); $model->attachments()->sync($ids); return response()->json('success'); }
缓存附件
可以选择将附件存储在文件系统或缓存中。根据ATTACHMENTS_CACHE_TYPE的值,有两种情况
- FILE
- 附件存储在文件系统中(ATTACHMENTS_CACHE_LOCATION)
- 映射存储在缓存键ATTACHMENTS_CACHE_MAP_KEY中
- [attachment1->id => path1, attachment2->id => path2, ...]
- CACHE
- 附件内容存储在缓存中,1个附件=1个缓存键
- 缓存键命名为:ATTACHMENTS_CACHE_KEY_PREFIX + attachment_id
控制行为的环境变量
- ATTACHMENTS_CACHE_ENABLED=true(默认:false)
- ATTACHMENTS_CACHE_MAP_KEY="ASEE_ATTACHMENTS_MAP"(默认:ASEE_ATTACHMENTS_MAP)
- ATTACHMENTS_CACHE_TYPE="FILE"(默认:FILE)
- ATTACHMENTS_CACHE_LOCATION="/tmp/"(默认:sys_get_temp_dir())
- ATTACHMENTS_CACHE_KEY_PREFIX="ASEE_ATTACHMENT_"(默认:ASEE_ATTACHMENT_)
- ATTACHMENTS_CACHE_TIME=3600(默认:3600秒)
扩展包
发布配置将使您能够更改包模型以及控制迁移的行为。如果扩展模型,请确保您正在实现原始模型。