asseco-voice/laravel-attachments

v2.11.0 2024-08-02 09:57 UTC

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秒)

扩展包

发布配置将使您能够更改包模型以及控制迁移的行为。如果扩展模型,请确保您正在实现原始模型。