collecthor / flysystem-adapters
FlySystem v3 的元适配器
Requires
- php: >=8.3
- league/flysystem: ^3.0
- psr/event-dispatcher: ^1.0
Requires (Dev)
- captainhook/plugin-composer: ^5.3
- ekino/phpstan-banned-code: ^2.1
- league/event: ^3.0
- league/flysystem-adapter-test-utilities: ^3.0
- league/flysystem-memory: ^3.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11
- ramsey/conventional-commits: ^1.3
- symplify/easy-coding-standard: ^12
- vimeo/psalm: dev-master
Suggests
- psr/event-dispatcher-implementations: *
- dev-master
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.0
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-virtualdirectoryprovidermetadata
- dev-improved-ci
- dev-dependabot/composer/phpunit/phpunit-tw-11
- dev-dependabot/composer/ekino/phpstan-banned-code-tw-2.1
- dev-dependabot/github_actions/actions/github-script-7
This package is auto-updated.
Last update: 2024-09-19 10:03:21 UTC
README
Flysystem 使用适配器作为存储实现的抽象。此库包含一组元适配器,它们接受 1 或多个适配器作为输入,并将它们公开为常规适配器。
OverlayAdapter
虽然 Flysystem 有挂载管理器,但这需要在消费者端显式了解挂载。为了分离关注点,这并不理想。想象一下只是将一个适配器暴露给您的代码(通过 FileSystem
),然后在配置端处理不同后端的后台魔法。
例如,OverlayAdapter
可以让您使用任何兼容 Flysystem
的文件浏览器,并使用它来浏览由 S3 存储上的真实文件、本地存储上的真实文件和从您的数据库中拉取的虚拟目录组成的虚拟文件系统。
DirectoryViaPlaceholderFileAdapter
某些存储不支持目录。许多基于 S3 的存储没有目录的概念。此适配器通过使用占位符文件来支持目录。其想法是路径中的文件定义了一个目录。
MetadataCachingAdapter
某些 API 有一个 API 调用来获取所有元数据。此适配器缓存这些调用,这样您就不会看到针对同一文件的多个 API 请求,例如对 lastModified
和 size
的调用。仅用于从调用 lastModified
和 mimeType
等获取所有元数据的适配器。
StripPrefixAdapter
从传递给适配器的所有路径中删除前缀。与 OverlayAdapter
结合使用,以将一个适配器挂载到另一个路径的另一个适配器中。
AddPrefixAdapter
向传递给适配器的所有路径添加前缀。与 OverlayAdapter
结合使用,以将一个适配器挂载到另一个路径的另一个适配器中。
VirtualDirectoryListAdapter
有时您希望为系统中的每个实体都提供一个目录,想象一下为每个用户都有一个文件夹。如果有许多用户,从存储 API 获取列表可能会很慢,但您已经在本地数据库中有这个列表。通过使用此适配器,您可以在底层适配器的特定路径上指定目录列表。
OverlayAdapter
使用路径前缀将一个适配器挂载到另一个适配器上。
EventedAdapter
此适配器使用 PSR-14 EventDispatcher
在修改存储的操作之前和之后分发事件。它们的初始用例是通知 CDN 更新其缓存。
MoveOverwriteAdapter
此适配器包装任何其他适配器,并在移动文件失败时尝试强制覆盖。这意味着在失败时,它会检查目标文件是否存在,如果存在,则删除它并重试移动命令。